/* package whatever; // don't place package name! */
import java.awt.* ;
import javax.swing.* ;
import javax.swing.event.* ;
import java.util.Calendar ;
import java.util.Date ;
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
{
JLabel nameLabel, streetLabel, stateLabel, dateLabel,
ageLabel, sexLabel, optionsLabel, aboutLabel;
JSpinner dateSpin;
JCheckBox morningCheck, afterNCheck, eveningCheck
;
public static void main
( String [ ] args
) {
new Ideone( ) ;
}
public Ideone( ) {
// Create the frame, position it and handle closing it
this .setLocationRelativeTo ( null ) ;
this .
setDefaultCloseOperation ( JFrame .
EXIT_ON_CLOSE ) ; this .setTitle ( "Random Layout" ) ;
nameLabel
= new JLabel ( " Name:" ) ;
streetLabel
= new JLabel ( " Street:" ) ;
// Create a set of radio buttons and wrap them in a group
Box sexBox
= Box .
createVerticalBox ( ) ; sexGroup.add ( maleRadio) ;
sexGroup.add ( femaleRadio) ;
sexBox.add ( maleRadio) ;
sexBox.add ( femaleRadio) ;
// Create a flow layout panel and space components 10px apart
stateLabel
= new JLabel ( "State" ) ;
statePanel.add ( stateLabel) ;
// Create a combo box that will hold the states
String [ ] states
= { "PA" ,
"NY" ,
"OH" ,
"WV" ,
"NJ" } ;
statePanel.add ( stateList) ;
dateLabel
= new JLabel ( "Appointment Date" ) ;
statePanel.add ( dateLabel) ;
// Get todays date
// Create a date spinner & set default to today, no minimum, or max
// Increment the days on button presses
// Can also increment YEAR, MONTH, or DAY_OF_MONTH
dateSpin = new JSpinner( new SpinnerDateModel( todaysDate, null , null ,
// DateEditor is an editor that handles displaying & editing the dates
JSpinner.DateEditor dateEditor = new JSpinner.DateEditor ( dateSpin, "dd/MM/yy" ) ;
dateSpin.setEditor ( dateEditor) ;
statePanel.add ( dateSpin) ;
ageLabel
= new JLabel ( "Age: 50" ) ;
statePanel.add ( ageLabel) ;
// Creates a slider with a min value of 1 thru 100
// and an initial value of 1
ageSlider
= new JSlider ( 1 ,
99 ,
50 ) ;
// Create an instance of ListenForEvents to handle events
ListenForSlider lForSlider = new ListenForSlider( ) ;
// Tell Java that you want to be alerted when an event
// occurs on the slider
ageSlider.addChangeListener ( lForSlider) ;
statePanel.add ( ageSlider) ;
// Create check boxs and assign them to a group
JCheckBox morningCheck, afterNCheck, eveningCheck
;
Box optionBox
= Box .
createVerticalBox ( ) ;
optionBox.add ( morningCheck) ;
optionBox.add ( afterNCheck) ;
optionBox.add ( eveningCheck) ;
optionBox.
setBorder ( BorderFactory .
createTitledBorder ( "Time of Day" ) ) ;
// Create a text area that is 6 columns high and 40 long
// Set the default text for the text area
aboutYou.setText ( "Tell us something about you" ) ;
// If text doesn't fit on a line, jump to the next
aboutYou.setLineWrap ( true ) ;
// Makes sure that words stay intact if a line wrap occurs
aboutYou.setWrapStyleWord ( true ) ;
// Adds scroll bars to the text area ----------
// Other options: VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_NEVER
this .add ( thePanel) ;
// Adjusts the size of the frame to best work for the components
this .pack ( ) ;
this .setVisible ( true ) ;
// Define if the user can resize the frame (true by default)
this .setResizable ( false ) ;
}
// Sets the rules for a component destined for a GridBagLayout
// and then adds it
private void addComp
( JPanel thePanel,
JComponent comp,
int xPos,
int yPos,
int compWidth,
int compHeight,
int place,
int stretch
) {
gridConstraints.gridx = xPos;
gridConstraints.gridy = yPos;
gridConstraints.gridwidth = compWidth;
gridConstraints.gridheight = compHeight;
gridConstraints.weightx = 100 ;
gridConstraints.weighty = 100 ;
gridConstraints.
insets = new Insets ( 5 ,
5 ,
5 ,
5 ) ; gridConstraints.anchor = place;
gridConstraints.fill = stretch;
thePanel.add ( comp, gridConstraints) ;
}
// Implements ActionListener so it can react to events on components
// Called when the spinner is changed
// Check if the source of the event was the button
if ( e.getSource ( ) == ageSlider) {
// Change the value for the label next to the spinner
ageLabel.setText ( "Age: " + ageSlider.getValue ( ) ) ;
}
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwppbXBvcnQgamF2YS5hd3QuKjsKCmltcG9ydCBqYXZheC5zd2luZy4qOwppbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuKjsKCmltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CmltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKCmltcG9ydCBqYXZhLnV0aWwuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZSBleHRlbmRzIEpGcmFtZQp7CglKTGFiZWwgbmFtZUxhYmVsLCBzdHJlZXRMYWJlbCwgc3RhdGVMYWJlbCwgZGF0ZUxhYmVsLAoJCWFnZUxhYmVsLCBzZXhMYWJlbCwgb3B0aW9uc0xhYmVsLCBhYm91dExhYmVsOwoJSlRleHRGaWVsZCBuYW1lVGV4dCwgc3RyZWV0VGV4dDsKCUpDb21ib0JveCBzdGF0ZUxpc3Q7CglKU3Bpbm5lciBkYXRlU3BpbjsKCUpTbGlkZXIgYWdlU2xpZGVyOwoJSlJhZGlvQnV0dG9uIG1hbGVSYWRpbywgZmVtYWxlUmFkaW87CglCdXR0b25Hcm91cCBzZXhHcm91cDsKCUpDaGVja0JveCBtb3JuaW5nQ2hlY2ssIGFmdGVyTkNoZWNrLCBldmVuaW5nQ2hlY2s7CglKVGV4dEFyZWEgYWJvdXRZb3U7CgkKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CgkJCgkJbmV3IElkZW9uZSgpOwoJCQoJfQoJCglwdWJsaWMgSWRlb25lKCl7CgkJCgkJLy8gQ3JlYXRlIHRoZSBmcmFtZSwgcG9zaXRpb24gaXQgYW5kIGhhbmRsZSBjbG9zaW5nIGl0CgkJCgkJdGhpcy5zZXRMb2NhdGlvblJlbGF0aXZlVG8obnVsbCk7CgkJdGhpcy5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkVYSVRfT05fQ0xPU0UpOwoJCXRoaXMuc2V0VGl0bGUoIlJhbmRvbSBMYXlvdXQiKTsKCQkJCQoJCUpQYW5lbCB0aGVQYW5lbCA9IG5ldyBKUGFuZWwoKTsKCQkJCQoJCXRoZVBhbmVsLnNldExheW91dChuZXcgR3JpZEJhZ0xheW91dCgpKTsKCQkKCQluYW1lTGFiZWwgPSBuZXcgSkxhYmVsKCIgIE5hbWU6Iik7CgkJCgkJYWRkQ29tcCh0aGVQYW5lbCwgbmFtZUxhYmVsLCAwLCAwLCAxLCAxLCBHcmlkQmFnQ29uc3RyYWludHMuRUFTVCwgR3JpZEJhZ0NvbnN0cmFpbnRzLk5PTkUpOwoJCQoJCW5hbWVUZXh0ID0gbmV3IEpUZXh0RmllbGQoMzApOwoJCQoJCWFkZENvbXAodGhlUGFuZWwsIG5hbWVUZXh0LCAxLCAwLCAyLCAxLCBHcmlkQmFnQ29uc3RyYWludHMuV0VTVCwgR3JpZEJhZ0NvbnN0cmFpbnRzLk5PTkUpOwoJCQoJCXN0cmVldExhYmVsID0gbmV3IEpMYWJlbCgiICBTdHJlZXQ6Iik7CgkJCgkJYWRkQ29tcCh0aGVQYW5lbCwgc3RyZWV0TGFiZWwsIDAsIDEsIDEsIDEsIEdyaWRCYWdDb25zdHJhaW50cy5FQVNULCBHcmlkQmFnQ29uc3RyYWludHMuTk9ORSk7CgkJCgkJc3RyZWV0VGV4dCA9IG5ldyBKVGV4dEZpZWxkKDMwKTsKCQkKCQlhZGRDb21wKHRoZVBhbmVsLCBzdHJlZXRUZXh0LCAxLCAxLCAyLCAxLCBHcmlkQmFnQ29uc3RyYWludHMuV0VTVCwgR3JpZEJhZ0NvbnN0cmFpbnRzLk5PTkUpOwoJCQoJCS8vIENyZWF0ZSBhIHNldCBvZiByYWRpbyBidXR0b25zIGFuZCB3cmFwIHRoZW0gaW4gYSBncm91cAoJCQoJCUJveCBzZXhCb3ggPSBCb3guY3JlYXRlVmVydGljYWxCb3goKTsKCQltYWxlUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKCJNYWxlIik7CgkJZmVtYWxlUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKCJGZW1hbGUiKTsKCQlCdXR0b25Hcm91cCBzZXhHcm91cCA9IG5ldyBCdXR0b25Hcm91cCgpOwoJCXNleEdyb3VwLmFkZChtYWxlUmFkaW8pOwoJCXNleEdyb3VwLmFkZChmZW1hbGVSYWRpbyk7CgkJc2V4Qm94LmFkZChtYWxlUmFkaW8pOwoJCXNleEJveC5hZGQoZmVtYWxlUmFkaW8pOwoJCXNleEJveC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoIlNleCIpKTsKCQlhZGRDb21wKHRoZVBhbmVsLCBzZXhCb3gsIDMsIDAsIDIsIDEsIEdyaWRCYWdDb25zdHJhaW50cy5XRVNULCBHcmlkQmFnQ29uc3RyYWludHMuTk9ORSk7CgkJCgkJLy8gQ3JlYXRlIGEgZmxvdyBsYXlvdXQgcGFuZWwgYW5kIHNwYWNlIGNvbXBvbmVudHMgMTBweCBhcGFydAoJCQoJCUpQYW5lbCBzdGF0ZVBhbmVsID0gbmV3IEpQYW5lbCgpOwoJCXN0YXRlUGFuZWwuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCwgMTAsIDApKTsKCQkKCQlzdGF0ZUxhYmVsID0gbmV3IEpMYWJlbCgiU3RhdGUiKTsKCQkKCQlzdGF0ZVBhbmVsLmFkZChzdGF0ZUxhYmVsKTsKCQkKCQkvLyBDcmVhdGUgYSBjb21ibyBib3ggdGhhdCB3aWxsIGhvbGQgdGhlIHN0YXRlcwoJCQoJCVN0cmluZ1tdIHN0YXRlcyA9IHsiUEEiLCAiTlkiLCAiT0giLCAiV1YiLCAiTkoifTsKCQkKCQlzdGF0ZUxpc3QgPSBuZXcgSkNvbWJvQm94KHN0YXRlcyk7CgkJCgkJc3RhdGVQYW5lbC5hZGQoc3RhdGVMaXN0KTsKCQkKCQlkYXRlTGFiZWwgPSBuZXcgSkxhYmVsKCJBcHBvaW50bWVudCBEYXRlIik7CgkJCgkJc3RhdGVQYW5lbC5hZGQoZGF0ZUxhYmVsKTsKCQkKCQkvLyBHZXQgdG9kYXlzIGRhdGUKCQkKCQlEYXRlIHRvZGF5c0RhdGUgPSBuZXcgRGF0ZSgpOwoJCQkJCgkJLy8gQ3JlYXRlIGEgZGF0ZSBzcGlubmVyICYgc2V0IGRlZmF1bHQgdG8gdG9kYXksIG5vIG1pbmltdW0sIG9yIG1heAoJCS8vIEluY3JlbWVudCB0aGUgZGF5cyBvbiBidXR0b24gcHJlc3NlcwoJCS8vIENhbiBhbHNvIGluY3JlbWVudCBZRUFSLCBNT05USCwgb3IgREFZX09GX01PTlRICgkJCQkKCQlkYXRlU3BpbiA9IG5ldyBKU3Bpbm5lcihuZXcgU3Bpbm5lckRhdGVNb2RlbCh0b2RheXNEYXRlLCBudWxsLCBudWxsLAoJCQkJICAgQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CgkJCQkKCQkvLyBEYXRlRWRpdG9yIGlzIGFuIGVkaXRvciB0aGF0IGhhbmRsZXMgZGlzcGxheWluZyAmIGVkaXRpbmcgdGhlIGRhdGVzCgkJCQkKCQlKU3Bpbm5lci5EYXRlRWRpdG9yIGRhdGVFZGl0b3IgPSBuZXcgSlNwaW5uZXIuRGF0ZUVkaXRvcihkYXRlU3BpbiwgImRkL01NL3l5Iik7CgkJZGF0ZVNwaW4uc2V0RWRpdG9yKGRhdGVFZGl0b3IpOwoJCQkJCgkJc3RhdGVQYW5lbC5hZGQoZGF0ZVNwaW4pOwoJCQoJCWFnZUxhYmVsID0gbmV3IEpMYWJlbCgiQWdlOiA1MCIpOwoJCQoJCXN0YXRlUGFuZWwuYWRkKGFnZUxhYmVsKTsKCQkKCQkvLyBDcmVhdGVzIGEgc2xpZGVyIHdpdGggYSBtaW4gdmFsdWUgb2YgMSB0aHJ1IDEwMAoJCS8vIGFuZCBhbiBpbml0aWFsIHZhbHVlIG9mIDEKCQkJCQoJCWFnZVNsaWRlciA9IG5ldyBKU2xpZGVyKDEsIDk5LCA1MCk7CgkJCgkJLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIExpc3RlbkZvckV2ZW50cyB0byBoYW5kbGUgZXZlbnRzCgkJCgkJTGlzdGVuRm9yU2xpZGVyIGxGb3JTbGlkZXIgPSBuZXcgTGlzdGVuRm9yU2xpZGVyKCk7CgkJCQkJCQoJCS8vIFRlbGwgSmF2YSB0aGF0IHlvdSB3YW50IHRvIGJlIGFsZXJ0ZWQgd2hlbiBhbiBldmVudAoJCS8vIG9jY3VycyBvbiB0aGUgc2xpZGVyCgkJCQkJCQoJCWFnZVNsaWRlci5hZGRDaGFuZ2VMaXN0ZW5lcihsRm9yU2xpZGVyKTsKCQkKCQlzdGF0ZVBhbmVsLmFkZChhZ2VTbGlkZXIpOwoJCQoJCWFkZENvbXAodGhlUGFuZWwsIHN0YXRlUGFuZWwsIDEsIDIsIDUsIDEsIEdyaWRCYWdDb25zdHJhaW50cy5FQVNULCBHcmlkQmFnQ29uc3RyYWludHMuTk9ORSk7CgkJCgkJLy8gQ3JlYXRlIGNoZWNrIGJveHMgYW5kIGFzc2lnbiB0aGVtIHRvIGEgZ3JvdXAKCQkKCQlKQ2hlY2tCb3ggbW9ybmluZ0NoZWNrLCBhZnRlck5DaGVjaywgZXZlbmluZ0NoZWNrOwoJCQoJCUJveCBvcHRpb25Cb3ggPSBCb3guY3JlYXRlVmVydGljYWxCb3goKTsKCQltb3JuaW5nQ2hlY2sgPSBuZXcgSkNoZWNrQm94KCJNb3JuaW5nIik7CgkJYWZ0ZXJOQ2hlY2sgPSBuZXcgSkNoZWNrQm94KCJBZnRlcm5vb24iKTsKCQlldmVuaW5nQ2hlY2sgPSBuZXcgSkNoZWNrQm94KCJFdmVuaW5nIik7CgkJCgkJb3B0aW9uQm94LmFkZChtb3JuaW5nQ2hlY2spOwoJCW9wdGlvbkJveC5hZGQoYWZ0ZXJOQ2hlY2spOwoJCW9wdGlvbkJveC5hZGQoZXZlbmluZ0NoZWNrKTsKCQlvcHRpb25Cb3guc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKCJUaW1lIG9mIERheSIpKTsKCQlhZGRDb21wKHRoZVBhbmVsLCBvcHRpb25Cb3gsIDEsIDMsIDIsIDEsIEdyaWRCYWdDb25zdHJhaW50cy5OT1JUSFdFU1QsIEdyaWRCYWdDb25zdHJhaW50cy5OT05FKTsKCQkKCQkvLyBDcmVhdGUgYSB0ZXh0IGFyZWEgdGhhdCBpcyA2IGNvbHVtbnMgaGlnaCBhbmQgNDAgbG9uZwoJCQoJCWFib3V0WW91ID0gbmV3IEpUZXh0QXJlYSg2LCA0MCk7CgkJCgkJLy8gU2V0IHRoZSBkZWZhdWx0IHRleHQgZm9yIHRoZSB0ZXh0IGFyZWEKCQkKCQlhYm91dFlvdS5zZXRUZXh0KCJUZWxsIHVzIHNvbWV0aGluZyBhYm91dCB5b3UiKTsKCQkKCQkvLyBJZiB0ZXh0IGRvZXNuJ3QgZml0IG9uIGEgbGluZSwganVtcCB0byB0aGUgbmV4dAoJCQoJCWFib3V0WW91LnNldExpbmVXcmFwKHRydWUpOwoJCQoJCS8vIE1ha2VzIHN1cmUgdGhhdCB3b3JkcyBzdGF5IGludGFjdCBpZiBhIGxpbmUgd3JhcCBvY2N1cnMKCQkKCQlhYm91dFlvdS5zZXRXcmFwU3R5bGVXb3JkKHRydWUpOwoJCQoJCS8vIEFkZHMgc2Nyb2xsIGJhcnMgdG8gdGhlIHRleHQgYXJlYSAtLS0tLS0tLS0tCgkJCgkJSlNjcm9sbFBhbmUgc2Nyb2xsYmFyMSA9IG5ldyBKU2Nyb2xsUGFuZShhYm91dFlvdSwgSlNjcm9sbFBhbmUuVkVSVElDQUxfU0NST0xMQkFSX0FMV0FZUywgSlNjcm9sbFBhbmUuSE9SSVpPTlRBTF9TQ1JPTExCQVJfQVNfTkVFREVEKTsKCQkJCQoJCS8vIE90aGVyIG9wdGlvbnM6IFZFUlRJQ0FMX1NDUk9MTEJBUl9BTFdBWVMsIFZFUlRJQ0FMX1NDUk9MTEJBUl9ORVZFUgoJCQkJCgkJYWRkQ29tcCh0aGVQYW5lbCwgc2Nyb2xsYmFyMSwgMiwgMywgMywgMSwgR3JpZEJhZ0NvbnN0cmFpbnRzLkVBU1QsIEdyaWRCYWdDb25zdHJhaW50cy5OT05FKTsKCQkKCQl0aGlzLmFkZCh0aGVQYW5lbCk7CgkJCgkJLy8gQWRqdXN0cyB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgdG8gYmVzdCB3b3JrIGZvciB0aGUgY29tcG9uZW50cwoJCQoJCXRoaXMucGFjaygpOwoJCQoJCXRoaXMuc2V0VmlzaWJsZSh0cnVlKTsKCQkKCQkvLyBEZWZpbmUgaWYgdGhlIHVzZXIgY2FuIHJlc2l6ZSB0aGUgZnJhbWUgKHRydWUgYnkgZGVmYXVsdCkKCQl0aGlzLnNldFJlc2l6YWJsZShmYWxzZSk7CgkJCgl9CgkKCS8vIFNldHMgdGhlIHJ1bGVzIGZvciBhIGNvbXBvbmVudCBkZXN0aW5lZCBmb3IgYSBHcmlkQmFnTGF5b3V0CgkvLyBhbmQgdGhlbiBhZGRzIGl0IAoJCglwcml2YXRlIHZvaWQgYWRkQ29tcChKUGFuZWwgdGhlUGFuZWwsIEpDb21wb25lbnQgY29tcCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgY29tcFdpZHRoLCBpbnQgY29tcEhlaWdodCwgaW50IHBsYWNlLCBpbnQgc3RyZXRjaCl7CgkJCgkJR3JpZEJhZ0NvbnN0cmFpbnRzIGdyaWRDb25zdHJhaW50cyA9IG5ldyBHcmlkQmFnQ29uc3RyYWludHMoKTsKCQkKCQlncmlkQ29uc3RyYWludHMuZ3JpZHggPSB4UG9zOwoJCWdyaWRDb25zdHJhaW50cy5ncmlkeSA9IHlQb3M7CgkJZ3JpZENvbnN0cmFpbnRzLmdyaWR3aWR0aCA9IGNvbXBXaWR0aDsKCQlncmlkQ29uc3RyYWludHMuZ3JpZGhlaWdodCA9IGNvbXBIZWlnaHQ7CgkJZ3JpZENvbnN0cmFpbnRzLndlaWdodHggPSAxMDA7CgkJZ3JpZENvbnN0cmFpbnRzLndlaWdodHkgPSAxMDA7CgkJZ3JpZENvbnN0cmFpbnRzLmluc2V0cyA9IG5ldyBJbnNldHMoNSw1LDUsNSk7CgkJZ3JpZENvbnN0cmFpbnRzLmFuY2hvciA9IHBsYWNlOwoJCWdyaWRDb25zdHJhaW50cy5maWxsID0gc3RyZXRjaDsKCQkKCQl0aGVQYW5lbC5hZGQoY29tcCwgZ3JpZENvbnN0cmFpbnRzKTsKCQkKCX0KCQoJLy8gSW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciBzbyBpdCBjYW4gcmVhY3QgdG8gZXZlbnRzIG9uIGNvbXBvbmVudHMKCQoJcHJpdmF0ZSBjbGFzcyBMaXN0ZW5Gb3JTbGlkZXIgaW1wbGVtZW50cyBDaGFuZ2VMaXN0ZW5lcnsKCgkvLyBDYWxsZWQgd2hlbiB0aGUgc3Bpbm5lciBpcyBjaGFuZ2VkCgkJcHVibGljIHZvaWQgc3RhdGVDaGFuZ2VkKENoYW5nZUV2ZW50IGUpIHsKCQkJCQkKCQkJLy8gQ2hlY2sgaWYgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgd2FzIHRoZSBidXR0b24KCQkJCQkKCQkJaWYoZS5nZXRTb3VyY2UoKSA9PSBhZ2VTbGlkZXIpewoJCQkJCgkJCQkvLyBDaGFuZ2UgdGhlIHZhbHVlIGZvciB0aGUgbGFiZWwgbmV4dCB0byB0aGUgc3Bpbm5lcgoJCQkJCQkKCQkJCWFnZUxhYmVsLnNldFRleHQoIkFnZTogIiArIGFnZVNsaWRlci5nZXRWYWx1ZSgpICk7CgkJCQkJCQoJCQkJCQkJCgkJCX0KCQkJCQkKCQl9CgkJCQoJCQkKCQkJCgl9Cn0=