From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27498 invoked by alias); 9 Jun 2004 05:49:24 -0000 Mailing-List: contact rhdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: rhdb-owner@sources.redhat.com Received: (qmail 27471 invoked from network); 9 Jun 2004 05:49:22 -0000 Received: from unknown (HELO web61108.mail.yahoo.com) (216.155.196.110) by sourceware.org with SMTP; 9 Jun 2004 05:49:22 -0000 Message-ID: <20040609054922.37013.qmail@web61108.mail.yahoo.com> Received: from [66.185.84.69] by web61108.mail.yahoo.com via HTTP; Wed, 09 Jun 2004 01:49:22 EDT Date: Wed, 09 Jun 2004 05:49:00 -0000 From: Deepak B Subject: Final set of changes to Administrator 2.0 (Java) for PostgreSQL 7.4 series. To: rhdb@sources.redhat.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1538249354-1086760162=:36937" X-SW-Source: 2004-q2/txt/msg00002.txt.bz2 --0-1538249354-1086760162=:36937 Content-Type: text/plain; charset=us-ascii Content-Id: Content-Disposition: inline Content-length: 596 A bit late, but better than never :) This patch brings Administrator up to speed with 7.4.x. All privileges items have been fixed to allow the new WITH GRANT OPTION, while maintaining 7.3.x compatibility. Also, thanks to Peter Eisentraut and Tom Lane for quick replies to my queries regarding certain changes in the ACL format for 7.4.x. Attached is the diff file and an additional file, PrivilegesCheckBoxPanel.java which is now required by Administrator. Deepak Bhole ______________________________________________________________________ Post your free ad now! http://personals.yahoo.ca --0-1538249354-1086760162=:36937 Content-Type: text/x-java; name="PrivilegesCheckBoxPanel.java" Content-Description: PrivilegesCheckBoxPanel.java Content-Disposition: inline; filename="PrivilegesCheckBoxPanel.java" Content-length: 16148 /* * Copyright (c) 2004 Red Hat, Inc. All rights reserved. * * This software may be freely redistributed under the terms of the * GNU General Public License. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Component of: Administrator GUI tool for PostgreSQL - Red Hat Edition */ package com.redhat.rhdb.admin; /** * A Check Box panel specifically for privileges. *

* Based on com.redhat.rhdb.admin.CheckBoxPanel by Brian Booth * * @author Deepak Bhole * */ public class PrivilegesCheckBoxPanel extends javax.swing.JPanel implements java.awt.event.ActionListener { /** Creates a new instance of PrivilegesCheckBoxPanel */ /** * Creates a CheckBoxPanel with a title * * @param names An array of names associated with the CheckBoxes * @param layout the layout of the panel. Must be either CheckBoxPanel.HORIZONTAL or CheckBoxPanel.VERTICAL * @param title the title of the panel * */ public PrivilegesCheckBoxPanel(String[] names, String title, String secondaryCheckBoxTitle) { jchButtons = new javax.swing.JCheckBox[names.length]; jchSecondaryButtons = new javax.swing.JCheckBox[names.length]; hasChanged = new boolean[names.length]; hasSecondaryChanged = new boolean[names.length]; hasSecondaryCBEnabled = true; hasSecondaryCB = !secondaryCheckBoxTitle.equals(""); java.awt.GridLayout gl; setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gridBagConstraints; for (int i = 0; i < names.length; i++) { gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 0); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = i; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jchButtons[i] = new javax.swing.JCheckBox(names[i]); jchButtons[i].setEnabled(false); add(jchButtons[i], gridBagConstraints); hasChanged[i] = false; jchButtons[i].addActionListener(this); if (hasSecondaryCB) { jchSecondaryButtons[i] = new javax.swing.JCheckBox(secondaryCheckBoxTitle); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = i; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; hasSecondaryChanged[i] = false; jchSecondaryButtons[i].setEnabled(false); add(jchSecondaryButtons[i], gridBagConstraints); jchSecondaryButtons[i].addActionListener(this); } } setBorder(new javax.swing.border.TitledBorder(title)); } /**. * For IDE Use. */ public PrivilegesCheckBoxPanel() { super(); } /** * Enables or disables the CheckBoxes * * @param enabled true if the CheckBoxes are enabled, false otherwise. * */ public void setEnabled(boolean enabled) { for (int i = 0; i < jchButtons.length; i++) { jchButtons[i].setEnabled(enabled); if (hasSecondaryCB && jchButtons[i].isSelected()) jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && enabled); } super.setEnabled(enabled); } /** * Deselects all checkboxes and clears history * */ public void reset() { for (int i = 0; i < jchButtons.length; i++) { jchButtons[i].setSelected(false); if (hasSecondaryCB) { jchSecondaryButtons[i].setSelected(false); jchSecondaryButtons[i].setEnabled(false); } hasChanged[i] = false; hasSecondaryChanged[i] = false; } } /** * Gets the text of the selected CheckBoxes * * @return the text associated with the selected CheckBoxes * */ public String[] getSelectedBoxes() { int size = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected()) size++; String[] names = new String[size]; int index = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected()) { names[index] = jchButtons[i].getText(); index++; } return names; } /** * Gets the text of the selected CheckBoxes * * @return the text associated with the selected CheckBoxes * */ public String[] getPrimaryOnlySelectedBoxes() { int size = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected() && !(hasSecondaryCB && jchSecondaryButtons[i].isSelected())) size++; String[] names = new String[size]; int index = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected() && !(hasSecondaryCB && jchSecondaryButtons[i].isSelected())) { names[index] = jchButtons[i].getText(); index++; } return names; } /** * Gets the text of the selected secondary CheckBoxes * * @return the text associated with the selected secondary CheckBoxes * */ public String[] getSelectedSecondaryBoxes() { int size = 0; for (int i = 0; i < jchButtons.length; i++) if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) size++; String[] names = new String[size]; int index = 0; for (int i = 0; i < jchButtons.length; i++) if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) { names[index] = jchButtons[i].getText(); index++; } return names; } /** * Gets the indexes of the selected CheckBoxes * * @return the indexes associated with the selected CheckBoxes * */ public int[] getSelectedIndexes() { int size = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected()) size++; int[] indexes = new int[size]; int index = 0; for (int i = 0; i < jchButtons.length; i++) if (jchButtons[i].isSelected()) { indexes[index] = i; index++; } return indexes; } /** * Gets the indexes of the selected and enabled secondary CheckBoxes * * @return the indexes associated with the selected and enabled secondary CheckBoxes */ public int[] getSelectedSecondaryIndexes() { int size = 0; for (int i = 0; i < jchButtons.length; i++) if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) size++; int[] indexes = new int[size]; int index = 0; for (int i = 0; i < jchButtons.length; i++) if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) { indexes[index] = i; index++; } return indexes; } /** * Checks if the chechbox is selected at the given index * * @return Returns true if the checkbox at 'index' is selected and * false otherwise * */ public boolean isSelected(int index) { return jchButtons[index].isSelected(); } /** * Checks if the secondary chechbox is selected at the given index * * @return Returns true if the checkbox at 'index' is selected and * false otherwise * */ public boolean isSecondarySelected(int index) { if (hasSecondaryCB) return jchSecondaryButtons[index].isSelected(); else return false; } /** * Sets the Selection mode of the CheckBox at the given index * * @param index the index of the RadioButton you want to select * @param isSelect true if the CheckBox is selected, false otherwise * */ public void setSelectedBox(int index, boolean isSelect) { jchButtons[index].setSelected(isSelect); if (isSelect) jchSecondaryButtons[index].setEnabled(true); } /** * Sets the Selection mode of the secondary CheckBox at the given index * * @param index the index of the RadioButton you want to select * @param isSelect true if the CheckBox is selected, false otherwise * */ public void setSelectedSecondaryBox(int index, boolean isSelect) { if (hasSecondaryCB) jchButtons[index].setSelected(isSelect); } /** * Sets the Selection mode of the CheckBoxes at the given indexes * * @param indexes the indexes of the CheckBoxes you want to select * @param isSelect true if the CheckBoxes are selected, false otherwise * */ public void setSelectedBoxes(int[] indexes, boolean isSelect) { for (int i = 0; i < indexes.length; i++) { jchButtons[indexes[i]].setSelected(isSelect); if (hasSecondaryCB && isSelect) jchSecondaryButtons[indexes[i]].setEnabled(hasSecondaryCBEnabled && true); } } /** * Sets the Selection mode of the Secondary CheckBoxes at the given indexes. * Secondary CB's can be selected iff the primary is selected. * * * @param indexes the indexes of the CheckBoxes you want to select * @param isSelect true if the CheckBoxes are selected, false otherwise * */ public void setSelectedSecondaryBoxes(int[] indexes, boolean isSelect) { if (!hasSecondaryCB) return; for (int i = 0; i < indexes.length; i++) { if (jchButtons[indexes[i]].isSelected()) jchSecondaryButtons[indexes[i]].setSelected(isSelect); } } /** * Sets the Selection mode of the first CheckBox with the given text * * @param str the text associated with the CheckBox you want to select * @param isSelect true if the CheckBox is selected, false otherwise * */ public void setSelectedBox(String str, boolean isSelect) { for (int i = 0; i < jchButtons.length; i++) if (str.equals(jchButtons[i].getText())) { jchButtons[i].setSelected(isSelect); if (hasSecondaryCB && isSelect) jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true); } } /** * Sets the Selection mode of the first secondary CheckBox with the given text (for the primary) * * @param str the text associated with the CheckBox whose secondary you want to select * @param isSelect true if the CheckBox is selected, false otherwise * */ public void setSelectedSecondaryBox(String str, boolean isSelect) { for (int i = 0; i < jchButtons.length; i++) if (hasSecondaryCB && str.equals(jchButtons[i].getText()) && jchButtons[i].isSelected()) jchSecondaryButtons[i].setSelected(isSelect); } /** * Sets the Selection mode of the CheckBoxes that have the given text * * @param str the text associated with the CheckBoxes you want to select * @param isSelect true if the CheckBoxes are selected, false otherwise * */ public void setSelectedBoxes(String[] str, boolean isSelect) { for (int i = 0; i < jchButtons.length; i++) for (int j = 0; j < str.length; j++) if (str[j].equals(jchButtons[i].getText())) { jchSecondaryButtons[i].setSelected(isSelect); if (hasSecondaryCB && isSelect) jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true); } } /** * Sets the Selection mode of the secondary CheckBoxes whose primary have the given text * * @param str the text associated with the CheckBoxes whose secondary you want to select * @param isSelect true if the CheckBoxes are selected, false otherwise * */ public void setSelectedSecondaryBoxes(String[] str, boolean isSelect) { for (int i = 0; i < jchButtons.length; i++) for (int j = 0; j < str.length; j++) if (hasSecondaryCB && str[j].equals(jchButtons[i].getText()) && jchButtons[i].isSelected()) jchSecondaryButtons[i].setSelected(isSelect); } /** * Gets the indexes of the CheckBoxes whose values have changed (Primary or Secondary). * * @return the indexes associated with the CheckBoxes whose values have changed. * */ public int[] getChangedIndexes() { int size = 0; for (int i = 0; i < hasChanged.length; i++) { if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) size++; } int[] toReturn = new int[size]; int index = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) { toReturn[index] = i; index++; } return toReturn; } /** * Gets the indexes of the primary CheckBoxes whose values have changed. * * @return the indexes associated with the CheckBoxes whose values have changed. * */ public int[] getChangedPrimaryIndexes() { int size = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i]) size++; int[] toReturn = new int[size]; int index = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i]) { toReturn[index] = i; index++; } return toReturn; } /** * Gets the indexes of the secondary CheckBoxes whose values have changed. * * @return the indexes associated with the CheckBoxes whose values have changed. * */ public int[] getChangedSecondaryIndexes() { if (!hasSecondaryCB) { return new int[0]; } int size = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i]) size++; int[] toReturn = new int[size]; int index = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i]) { toReturn[index] = i; index++; } return toReturn; } /** * Gets the text of the CheckBoxes whose values have changed. * * @return the text associated with the CheckBoxes whose values have changed. * */ public String[] getChangedStrings() { int size = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) size++; String[] toReturn = new String[size]; int index = 0; for (int i = 0; i < hasChanged.length; i++) if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) { toReturn[index] = jchButtons[i].getText(); index++; } return toReturn; } /** * Set all secondary checkboxes to given state (selected items are unselected). * * @param enabled The state to set the boxes to. */ public void setSecondaryCBEnabled(boolean enabled) { if (!hasSecondaryCB) return; hasSecondaryCBEnabled = enabled; for (int i=0; i < jchSecondaryButtons.length; i++) { jchSecondaryButtons[i].setSelected(false); jchSecondaryButtons[i].setEnabled(enabled); } } /** * Run whenever a CheckBoxes value changes. Fires a PropertyChangedEvent * * @param evt the selection or de-selection of a CheckBox * */ public void actionPerformed(java.awt.event.ActionEvent evt) { for (int i = 0; i < jchButtons.length; i++) { if (evt.getSource() == jchButtons[i]) hasChanged[i] = !hasChanged[i]; if (hasSecondaryCB && evt.getSource() == jchSecondaryButtons[i]) { hasSecondaryChanged[i] = !hasSecondaryChanged[i]; } if (evt.getSource() == jchButtons[i]) { if (jchButtons[i].isSelected()) { if (hasSecondaryCB) jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true); } else { if (hasSecondaryCB) jchSecondaryButtons[i].setEnabled(false); } } } firePropertyChange(SELECTION_MADE, !hasChanged[0], hasChanged[0]); } protected javax.swing.JCheckBox[] jchButtons = new javax.swing.JCheckBox[0]; protected javax.swing.JCheckBox[] jchSecondaryButtons = new javax.swing.JCheckBox[0]; protected boolean[] hasChanged = new boolean[0]; protected boolean[] hasSecondaryChanged = new boolean[0]; private boolean hasSecondaryCB = false; private boolean hasSecondaryCBEnabled = true; /** Name of the PropertyChangeEvent */ public static final String SELECTION_MADE = "Check Box Selected"; } --0-1538249354-1086760162=:36937 Content-Type: application/octet-stream; name="administrator-7.4patch-3" Content-Transfer-Encoding: base64 Content-Description: administrator-7.4patch-3 Content-Disposition: attachment; filename="administrator-7.4patch-3" Content-length: 218840 PyBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL1ByaXZpbGVnZXNDaGVja0Jv eFBhbmVsLmphdmEKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3JjL3JoZGIvZ3VpdG9vbHMv cmhkYi1hZG1pbi9DaGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu OApkaWZmIC1jIC1yMS44IENoYW5nZUxvZwoqKiogQ2hhbmdlTG9nCTQgTWF5 IDIwMDQgMTY6NTc6MTQgLTAwMDAJMS44Ci0tLSBDaGFuZ2VMb2cJOSBKdW4g MjAwNCAwNTozOToyMCAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDEsMyAq KioqCi0tLSAxLDEwOCAtLS0tCisgMjAwNC0wNi0wOSAgRGVlcGFrIEJob2xl ICA8aWJldHRoaXNpZGlzYXZhaWxhYmxlQHlhaG9vLmNhPgorIAorIAkqIHNy Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vQ2hlY2tCb3hQYW5lbC5qYXZhOiBB ZGRlZCBpbnRpYWxpemF0aW9uCisgCWNvZGUgZm9yIGNoZWNrYm94L2Jvb2xl YW4gYXJyYXlzIHRvIHByZXZlbnQgTnVsbFBvaW50ZXJFeGNlcHRpb24ncy4g IAorIAkqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vRWRpdFByaXZpbGVn ZXNEaWFsb2cuZm9ybTogQ2hhbmdlZCBieSB0aGUKKyAJSURFLgorIAkqIHNy Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vRWRpdFByaXZpbGVnZXNEaWFsb2cu amF2YTogQWRkZWQKKyAJY29kZSB0byBnZXQgdGhlIEdSQU5UIE9QVElPTiBz dHJpbmcgKE9QVElPTiBHUkFOVCBXSVRIKSwgc28gdGhhdCB0aGUKKyAJYXBw cm9wcmlhdGUgY2hlY2tib3hlcyBzaG93IHVwIGluIDcuNC54IHZlcnNpb25z LiBDaGFuZ2VkIGpwUHJpdmlsZWdlcworIAl0byBiZSBvZiB0eXBlIFByaXZp bGVnZXNDaGVja0JveFBhbmVsIHdoaWNoIGlzIG1vcmUgc3VpdGVkLCBnaXZl biB0aGUKKyAJY2hhbmdlcyB0byB0aGUgUHJpdmlsZWdlcyBzdHJ1Y3R1cmUg aW4gNy40LnguCisgCShqY2JQdWJsaWNBY3Rpb25QZXJmb3JtZWQpOiBOZXcg c2NhZmZvbGRpbmcgZnVuY3Rpb24uIFVwZGF0ZXMgc3RhdHVzCisgCW9mIHRo ZSBPUFRJT04gR1JBTlQgV0lUSCBjaGVja2JveCB0byBlbnN1cmUgdGhhdCBv bmx5ICJ1c2VycyIgY2FuIGJlCisgCWdpdmVuIHRoYXQgcHJpdmlsZWdlIG9w dGlvbi4KKyAJKGpsR3JvdXBzVmFsdWVDaGFuZ2VkKTogRGl0dG8uCisgCShq bFVzZXJzVmFsdWVDaGFuZ2VkKTogRGl0dG8uCisgCShhZGp1c3RHcmFudFdp dGhCb3hlcyk6IE5ldyBmdW5jdGlvbiAuVXBkYXRlcyBzdGF0dXMgb2YgdGhl IE9QVElPTgorIAlHUkFOVCBXSVRIIGNoZWNrYm94IHRvIGVuc3VyZSB0aGF0 IG9ubHkgInVzZXJzIiBjYW4gYmVnaXZlbiB0aGF0CisgCXByaXZpbGVnZSBv cHRpb24uCisgCShkb0FwcGx5QWN0aW9uKTogQ2hhbmdlIGZ1bmN0aW9uIHRv IHdvcmsgd2l0aCB0aGUgbmV3IFdJVEggR1JBTlQKKyAJT1BUSU9OIG9wdGlv biBmb3IgNy40LnggYmFja2VuZHMuCisgCShnZXRQcml2aWxlZ2VzKTogRGl0 dG8uCisgCSh1cGRhdGVQcml2aWxlZ2VzKTogRGl0dG8uIEJhc2VkIG9uIHRo ZSBwcml2aWxlZ2UsIHRoZSBXSVRIIEdSQU5UCisgCU9QVElPTiBjaGVja2Jv eCBpcyBjaGVja2VkIGFzIG5lZWRlZC4gIAorIAkqIHNyYy9jb20vcmVkaGF0 L3JoZGIvYWRtaW4vTWFuYWdlUHJpdmlsZWdlc0RpYWxvZy5mb3JtOiBDaGFu Z2VkIGJ5IHRoZQorIAlJREUuICAKKyAJKiBzcmMvY29tL3JlZGhhdC9yaGRi L2FkbWluL01hbmFnZVByaXZpbGVnZXNEaWFsb2cuamF2YTogQ2hhbmdlZAor IAljb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBncmFudE9wdGlvblN0 cmluZyBzbyB0aGF0IHRoZSBXSVRIIEdSQU5UCisgCU9QVElPTiBjaGVja2Jv eGVzIHNob3cgdXAuIENoYW5nZWQganBEYXRhYmFzZVByaXYsIGpwU2NoZW1h UHJpdiwKKyAJanBUYWJsZVByaXYsIGpwVmlld1ByaXYsIGpwU2VxdWVuY2Vz UHJpdiwganBMYW5ndWFnZXNQcml2IGFuZAorIAlqcEZ1bmN0aW9uUHJpdiB0 byBiZSBQcml2aWxlZ2VzQ2hlY2tCb3hQYW5lbCB3aGljaCBpcyBtb3JlIHN1 aXRlZCBmb3IKKyAJdGhlIG5ldyBwcml2aWxlZ2VzIGZ1bmN0aW9uYWxpdHkg aW4gNy40LnguCisgCShsYW5ndWFnZVByaXZpbGVnZUNoYW5nZSk6IEZpeCBi dWcgaW4gZnVuY3Rpb24gdGhhdCBjYXVzZWQgYXBwbHkgdG8gYmUKKyAJZGlz YWJsZWQgaWYgbXVsdGlwbGUgaXRlbXMgd2VyZSBzZWxlY3RlZCAoaXQgc2hv dWxkIGJlIGVuYWJsZWQgc2luY2UgYQorIAltYXNzIGNoYW5nZSBpcyBhYm91 dCB0byBoYXBwZW4sIGFuZCB0aGUgdXNlciBzaG91bGQgYmUgYXdhcmUgb2Yg d2hhdAorIAlpcyBhYm91dCB0byBoYXBwZW4gd2hldGhlciBldmVuIGlmIGlu IHRoZSBlbmQsIG5vdGhpbmcgbWF5IHJlYWxseQorIAljaGFuZ2UpLgorIAko ZnVuY3Rpb25Qcml2aWxlZ2VDaGFuZ2UpOiBEaXR0by4KKyAJKHNlcXVlbmNl UHJpdmlsZWdlQ2hhbmdlKTogRGl0dG8uCisgCSh2aWV3UHJpdmlsZWdlQ2hh bmdlKTogRGl0dG8uCisgCSh0YWJsZVByaXZpbGVnZUNoYW5nZSk6IERpdHRv LgorIAkoc2NoZW1hUHJpdmlsZWdlQ2hhbmdlKTogRGl0dG8uCisgCShkYXRh YmFzZVByaXZpbGVnZUNoYW5nZSk6IERpdHRvLgorIAkoc2NoZW1hU2VsZWN0 ZWQpOiBDaGFuZ2UgZnVuY3Rpb24gdG8gd29yayB3aXRoIHRoZSBuZXcgV0lU SCBHUkFOVAorIAlPUFRJT04gb3B0aW9uIGZvciA3LjQueCBiYWNrZW5kcy4g QmFzZWQgb24gdGhlIHByaXZpbGVnZSwgdGhlIFdJVEgKKyAJR1JBTlQgT1BU SU9OIGNoZWNrYm94IGlzIGNoZWNrZWQgYXMgbmVlZGVkLgorIAkoZGF0YWJh c2VTZWxlY3RlZCk6IERpdHRvLgorIAkoZnVuY3Rpb25TZWxlY3RlZCk6IERp dHRvLgorIAkobGFuZ3VhZ2VTZWxlY3RlZCk6IERpdHRvLgorIAkoc2VxdWVu Y2VTZWxlY3RlZCk6IERpdHRvLgorIAkodmlld1NlbGVjdGVkKTogRGl0dG8u CisgCSh0YWJsZVNlbGVjdGVkKTogRGl0dG8uCisgCSh1cGRhdGVQcml2aWxl Z2VzKTogQ2hhbmdlIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCB0aGUgbmV3IFdJ VEggR1JBTlQKKyAJT1BUSU9OIGluIDcuNC54IGJhY2tlbmRzLgorIAkqIHNy Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vT2JqZWN0VXBkYXRlLmphdmE6IEFk ZGVkIG5ldyB0b2tlbnMKKyAJcGVydGFpbmluZyB0byB0aGUgV0lUSCBHUkFO VCBPUFRJT04gb3B0aW9uLgorIAkqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRt aW4vUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwuamF2YTogTmV3IGZpbGUuIEEK KyAJbW9yZSBjb21wbGV4IGV4dGVuc2lvbiBvZiBDaGVja0JveFBhbmVsIChu b3QgaW5oZXJpdGVkIGR1ZSB0byB0b28gbWFueQorIAlkaWZmZXJlbmNlcyku IFRoaXMgcGFuZWwgYWxsb3dzICJzZWNvbmRhcnkiIGNoZWNrYm94ZXMgd2hp Y2ggYmVoYXZlIGluCisgCWEgbWFubmVyIHJlcXVpcmVkIGJ5IHRoZSBwcml2 aWxlZ2UgZGlhbG9ncyBmb3IgdGhlIFdJVEggR1JBTlQgT1BUSU9OCisgCW9w dGlvbi4KKyAJKiBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL1ByaXZpbGVn ZXNVcGRhdGUuamF2YQorIAkoZ2V0VXBkYXRlRnVuY3Rpb25Qcml2U3RyaW5n KTogQ2hhbmdlIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCB0aGUgbmV3CisgCVdJ VEggR1JBTlQgT1BUSU9OIG9wdGlvbi4KKyAJKGdldFVwZGF0ZUxhbmd1YWdl UHJpdlN0cmluZyk6IERpdHRvLgorIAkoZ2V0VXBkYXRlVmlld1ByaXZTdHJp bmcpOiBEaXR0by4KKyAJKGdldFVwZGF0ZVNlcXVlbmNlUHJpdlN0cmluZyk6 IERpdHRvLgorIAkoZ2V0VXBkYXRlRGF0YWJhc2VQcml2U3RyaW5nKTogRGl0 dG8uCisgCShnZXRVcGRhdGVTY2hlbWFQcml2U3RyaW5nKTogRGl0dG8uCisg CShnZXRVcGRhdGVUYWJsZVByaXZTdHJpbmcpOiBEaXR0by4KKyAJKiBzcmMv Y29tL3JlZGhhdC9yaGRiL2FkbWluL3Bnc3FsL0Fic3RyYWN0UmhkYjczRGF0 YWJhc2VNZXRhRGF0YS5qYXZhCisgCShnZXREYXRhYmFzZVByaXZpbGVnZXMp OiBDaGFuZ2UgZnVuY3Rpb24gdG8gcmV0dXJuIDIgbW9yZSBmaWVsZHMsCisg CUdSQU5UT1IgYW5kIElTX0dSQU5UQUJMRSAoYXMgZGVmaW5lZCBpbiBKREJD IHNwZWNzIGZvcgorIAlnZXRUYWJsZVByaXZpbGVnZXMoKSkuCisgCShnZXRG dW5jdGlvblByaXZpbGVnZXMpOiBEaXR0by4KKyAJKGdldEdyYW50T3B0aW9u U3RyaW5nKTogTmV3IGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSBncmFudCBvcHRp b24KKyAJc3RyaW5nLiBFbW1wdHkgc3RyaW5nIGZvciA3LjMueCBhbmQgbG93 ZXIgYmFja2VuZHMuCisgCShnZXRMYW5ndWFnZVByaXZpbGVnZXMpOiBDaGFu Z2UgZnVuY3Rpb24gdG8gcmV0dXJuIDIgbW9yZSBmaWVsZHMsCisgCUdSQU5U T1IgYW5kIElTX0dSQU5UQUJMRSAoYXMgZGVmaW5lZCBpbiBKREJDIHNwZWNz IGZvcgorIAlnZXRUYWJsZVByaXZpbGVnZXMoKSkuCisgCShnZXRTY2hlbWFQ cml2aWxlZ2VzKTogRGl0dG8uCisgCShnZXRTZXF1ZW5jZVByaXZpbGVnZXMp OiBEaXR0by4KKyAJKGdldFRhYmxlUHJpdmlsZWdlcyk6IERpdHRvLgorIAko Z2V0Vmlld1ByaXZpbGVnZXMpOiBEaXR0by4KKyAJKGdldEFDTENvbXBvbmVu dHMpOiBOZXcgZnVuY3Rpb24uIFRha2VzIGluIEFDTCBpbiBmb3JtYXQgYXMg cGVyIDcuNC54CisgCWRvY3MsIGFuZCBicmVha3MgaXQgZG93biBpbnRvIGNv bXBvbmVudHMuCisgCShwYXJzZUFDTEFycmF5KTogT3ZlcmxvYWRlZCBoZWxw ZXIgZnVuY3Rpb24gZnJvbSBQb3N0Z3JlU1FMIEpEQkMuCisgCShhZGRBQ0xQ cml2aWxlZ2VzKTogRGl0dG8uCisgCShwYXJzZUFDTCk6IERpdHRvLgorIAkq IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vcGdzcWwvQWJzdHJhY3RSaGRi NzREYXRhYmFzZU1ldGFEYXRhLmphdmE6CisgCShnZXRHcmFudE9wdGlvblN0 cmluZyk6IE5ldyBmdW5jdGlvbi4gUmV0dXJucyB0aGUgZ3JhbnQgb3B0aW9u CisgCXN0cmluZyBmb3IgNy40LnggYW5kIGhpZ2hlciBiYWNrZW5kcy4KKyAJ KiBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL3Bnc3FsL0FkbWluRGF0YWJh c2VNZXRhRGF0YS5qYXZhCisgCShnZXRHcmFudE9wdGlvblN0cmluZyk6IE5l dyBmdW5jdGlvbiBhZGRlZCB0byBpbnRlcmZhY2UuCisgCSogc3JjL2NvbS9y ZWRoYXQvcmhkYi9hZG1pbi90cmVlL0RhdGFiYXNlTm9kZS5qYXZhIChyYWlz ZVZpZXcpOiBDaGFuZ2UKKyAJZnVuY3Rpb24gdG8gc2hvdyBJU19HUkFOVEFC TEUgYW5kIEdSQU5UT1IgaW4gdGhlIHByaXZpbGVnZXMgcm93IGZvcgorIAl0 aGUgdmlldy4KKyAJKiBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL3RyZWUv RnVuY3Rpb25Ob2RlLmphdmE6IERpdHRvLgorIAkqIHNyYy9jb20vcmVkaGF0 L3JoZGIvYWRtaW4vdHJlZS9MYW5ndWFnZU5vZGUuamF2YTogRGl0dG8uCisg CSogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVlL1NjaGVtYU5vZGUu amF2YTogRGl0dG8uCisgCSogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90 cmVlL1NlcXVlbmNlTm9kZS5qYXZhOiBEaXR0by4KKyAJKiBzcmMvY29tL3Jl ZGhhdC9yaGRiL2FkbWluL3RyZWUvVGFibGVOb2RlLmphdmE6IERpdHRvLgor IAkqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9WaWV3Tm9kZS5q YXZhOiBEaXR0by4KKyAJCisgCiAgMjAwNC0wNS0wNCAgRGVlcGFrIEJob2xl ICA8aWJldHRoaXNpZGlzYXZhaWxhYmxlQHlhaG9vLmNhPgogIAogIAkqIHNy Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vQWRkQ29sdW1uRGlhbG9nLmphdmE6 IEFkZGVkIHN1cHBvcnQgZm9yCkluZGV4OiBzcmMvY29tL3JlZGhhdC9yaGRi L2FkbWluL0FkbWluaXN0cmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3JjL3JoZGIvZ3VpdG9vbHMvcmhk Yi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL0FkbWluaXN0cmF0 b3IuamF2YSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC1j IC1yMS4xLjEuMSBBZG1pbmlzdHJhdG9yLmphdmEKKioqIHNyYy9jb20vcmVk aGF0L3JoZGIvYWRtaW4vQWRtaW5pc3RyYXRvci5qYXZhCTIxIE5vdiAyMDAz IDE4OjMwOjIwIC0wMDAwCTEuMS4xLjEKLS0tIHNyYy9jb20vcmVkaGF0L3Jo ZGIvYWRtaW4vQWRtaW5pc3RyYXRvci5qYXZhCTkgSnVuIDIwMDQgMDU6Mzk6 MjAgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAzMywzNyAqKioqCiAgCQlN ZXRhbExvb2tBbmRGZWVsLnNldEN1cnJlbnRUaGVtZShuZXcgQWRtaW5Mb29r QW5kRmVlbCgpKTsKICAJCW5ldyBNYWluV2luZG93KCkuc2hvdygpOwogIAl9 CiEgCQogIH0KLS0tIDMzLDM3IC0tLS0KICAJCU1ldGFsTG9va0FuZEZlZWwu c2V0Q3VycmVudFRoZW1lKG5ldyBBZG1pbkxvb2tBbmRGZWVsKCkpOwogIAkJ bmV3IE1haW5XaW5kb3coKS5zaG93KCk7CiAgCX0KISAKICB9CkluZGV4OiBz cmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL0NoZWNrQm94UGFuZWwuamF2YQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3Jj L3JoZGIvZ3VpdG9vbHMvcmhkYi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRi L2FkbWluL0NoZWNrQm94UGFuZWwuamF2YSx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xLjEuMQpkaWZmIC1jIC1yMS4xLjEuMSBDaGVja0JveFBhbmVsLmph dmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vQ2hlY2tCb3hQYW5l bC5qYXZhCTIxIE5vdiAyMDAzIDE4OjMwOjIxIC0wMDAwCTEuMS4xLjEKLS0t IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vQ2hlY2tCb3hQYW5lbC5qYXZh CTkgSnVuIDIwMDQgMDU6Mzk6MjAgLTAwMDAKKioqKioqKioqKioqKioqCioq KiAxLDUgKioqKgogIC8qCiEgICogQ29weXJpZ2h0IChjKSAyMDAzIFJlZCBI YXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFRoaXMg c29mdHdhcmUgbWF5IGJlIGZyZWVseSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUKICAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZS4KLS0tIDEsNSAtLS0tCiAgLyoKISAgKiBDb3B5cmlnaHQgKGMpIDIwMDMs IDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAq CiAgICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZnJlZWx5IHJlZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLgoqKioqKioqKioqKioqKioKKioqIDMxMywzMjAgKioq KgogIAlmaXJlUHJvcGVydHlDaGFuZ2UoU0VMRUNUSU9OX01BREUsICFoYXND aGFuZ2VkWzBdLCBoYXNDaGFuZ2VkWzBdKTsKICAgICAgfQogIAohICAgICBw cml2YXRlIGphdmF4LnN3aW5nLkpDaGVja0JveFtdIGpjaEJ1dHRvbnM7CiEg ICAgIHByaXZhdGUgYm9vbGVhbltdIGhhc0NoYW5nZWQ7CiAgCiAgICAgIC8q KiBTdGF0aWMgTGF5b3V0IFZhbHVlIC0gRGlzcGxheXMgQnV0dG9ucyBIb3Jp em9udGFsbHkgKi8KICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSE9S SVpPTlRBTCA9IDE7Ci0tLSAzMTMsMzIwIC0tLS0KICAJZmlyZVByb3BlcnR5 Q2hhbmdlKFNFTEVDVElPTl9NQURFLCAhaGFzQ2hhbmdlZFswXSwgaGFzQ2hh bmdlZFswXSk7CiAgICAgIH0KICAKISAgICAgcHJvdGVjdGVkIGphdmF4LnN3 aW5nLkpDaGVja0JveFtdIGpjaEJ1dHRvbnMgPSBuZXcgamF2YXguc3dpbmcu SkNoZWNrQm94WzBdOwohICAgICBwcm90ZWN0ZWQgYm9vbGVhbltdIGhhc0No YW5nZWQgPSBuZXcgYm9vbGVhblswXTsKICAKICAgICAgLyoqIFN0YXRpYyBM YXlvdXQgVmFsdWUgLSBEaXNwbGF5cyBCdXR0b25zIEhvcml6b250YWxseSAq LwogICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIT1JJWk9OVEFMID0g MTsKSW5kZXg6IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vRWRpdFByaXZp bGVnZXNEaWFsb2cuZm9ybQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3JoZGIvc3JjL3JoZGIvZ3VpdG9vbHMvcmhkYi1hZG1pbi9z cmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL0VkaXRQcml2aWxlZ2VzRGlhbG9n LmZvcm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1jIC1yMS4x IEVkaXRQcml2aWxlZ2VzRGlhbG9nLmZvcm0KKioqIHNyYy9jb20vcmVkaGF0 L3JoZGIvYWRtaW4vRWRpdFByaXZpbGVnZXNEaWFsb2cuZm9ybQkxNCBKYW4g MjAwNCAwMDo1Mzo1MCAtMDAwMAkxLjEKLS0tIHNyYy9jb20vcmVkaGF0L3Jo ZGIvYWRtaW4vRWRpdFByaXZpbGVnZXNEaWFsb2cuZm9ybQk5IEp1biAyMDA0 IDA1OjM5OjIwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMzcsNDIgKioq KgotLS0gMzcsNDUgLS0tLQogICAgICAgICAgICAgICAgPENvbm5lY3Rpb24g Y29kZT0iQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2Vz LkRMR19FRElUX1BSSVZJTEVHRVNfUFVCTElDKSIgdHlwZT0iY29kZSIvPgog ICAgICAgICAgICAgIDwvUHJvcGVydHk+CiAgICAgICAgICAgIDwvUHJvcGVy dGllcz4KKyAgICAgICAgICAgPEV2ZW50cz4KKyAgICAgICAgICAgICA8RXZl bnRIYW5kbGVyIGV2ZW50PSJhY3Rpb25QZXJmb3JtZWQiIGxpc3RlbmVyPSJq YXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2 YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQiIGhhbmRsZXI9ImpjYlB1YmxpY0Fj dGlvblBlcmZvcm1lZCIvPgorICAgICAgICAgICA8L0V2ZW50cz4KICAgICAg ICAgICAgPEF1eFZhbHVlcz4KICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFt ZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZh LmxhbmcuU3RyaW5nIiB2YWx1ZT0iamNiUHVibGljLmFkZEFjdGlvbkxpc3Rl bmVyKG5ldyBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcigpIHsmI3hh OyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChqYXZh LmF3dC5ldmVudC5BY3Rpb25FdmVudCBldnQpIHsmI3hhOyAgICAgICAgICAg ICAgICB1cGRhdGVQcml2aWxlZ2VzKCk7JiN4YTsgICAgICAgICAgICB9JiN4 YTsgICAgICAgIH0pOyIvPgogICAgICAgICAgICA8L0F1eFZhbHVlcz4KKioq KioqKioqKioqKioqCioqKiA4MCw4NSAqKioqCi0tLSA4Myw5MSAtLS0tCiAg ICAgICAgICAgIDxMYXlvdXQgY2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1bGVz LmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNjcm9sbFBhbmVTdXBw b3J0TGF5b3V0Ii8+CiAgICAgICAgICAgIDxTdWJDb21wb25lbnRzPgogICAg ICAgICAgICAgIDxDb21wb25lbnQgY2xhc3M9ImNvbS5yZWRoYXQucmhkYi5h ZG1pbi5BZG1pbkxpc3QiIG5hbWU9ImpsVXNlcnMiPgorICAgICAgICAgICAg ICAgPEV2ZW50cz4KKyAgICAgICAgICAgICAgICAgPEV2ZW50SGFuZGxlciBl dmVudD0idmFsdWVDaGFuZ2VkIiBsaXN0ZW5lcj0iamF2YXguc3dpbmcuZXZl bnQuTGlzdFNlbGVjdGlvbkxpc3RlbmVyIiBwYXJhbWV0ZXJzPSJqYXZheC5z d2luZy5ldmVudC5MaXN0U2VsZWN0aW9uRXZlbnQiIGhhbmRsZXI9ImpsVXNl cnNWYWx1ZUNoYW5nZWQiLz4KKyAgICAgICAgICAgICAgIDwvRXZlbnRzPgog ICAgICAgICAgICAgICAgPEF1eFZhbHVlcz4KICAgICAgICAgICAgICAgICAg PEF1eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0luaXRDb2RlUG9z dCIgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWU9ImpsVXNlcnMuYWRk TGlzdFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBqYXZheC5zd2luZy5ldmVudC5M aXN0U2VsZWN0aW9uTGlzdGVuZXIoKSB7JiN4YTsgICAgICAgICAgICBwdWJs aWMgdm9pZCB2YWx1ZUNoYW5nZWQoamF2YXguc3dpbmcuZXZlbnQuTGlzdFNl bGVjdGlvbkV2ZW50IGV2dCkgeyYjeGE7ICAgICAgICAgICAgICAgIHVwZGF0 ZVByaXZpbGVnZXMoKTsmI3hhOyAgICAgICAgICAgIH0mI3hhOyAgICAgICAg fSk7Ii8+CiAgICAgICAgICAgICAgICA8L0F1eFZhbHVlcz4KKioqKioqKioq KioqKioqCioqKiA5NiwxMTggKioqKgogICAgICAgICAgICA8TGF5b3V0IGNs YXNzPSJvcmcubmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0 cy5zdXBwb3J0LkpTY3JvbGxQYW5lU3VwcG9ydExheW91dCIvPgogICAgICAg ICAgICA8U3ViQ29tcG9uZW50cz4KICAgICAgICAgICAgICA8Q29tcG9uZW50 IGNsYXNzPSJjb20ucmVkaGF0LnJoZGIuYWRtaW4uQWRtaW5MaXN0IiBuYW1l PSJqbEdyb3VwcyI+CiAgICAgICAgICAgICAgICA8QXV4VmFsdWVzPgogICAg ICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0 b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1 ZT0iamxHcm91cHMuYWRkTGlzdFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBqYXZh eC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uTGlzdGVuZXIoKSB7JiN4YTsg ICAgICAgICAgICBwdWJsaWMgdm9pZCB2YWx1ZUNoYW5nZWQoamF2YXguc3dp bmcuZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50IGV2dCkgeyYjeGE7ICAgICAg ICAgICAgICAgIHVwZGF0ZVByaXZpbGVnZXMoKTsmI3hhOyAgICAgICAgICAg IH0mI3hhOyAgICAgICAgfSk7Ii8+CiAgICAgICAgICAgICAgICA8L0F1eFZh bHVlcz4KICAgICAgICAgICAgICA8L0NvbXBvbmVudD4KICAgICAgICAgICAg PC9TdWJDb21wb25lbnRzPgogICAgICAgICAgPC9Db250YWluZXI+CiEgICAg ICAgICA8Q29udGFpbmVyIGNsYXNzPSJjb20ucmVkaGF0LnJoZGIuYWRtaW4u Q2hlY2tCb3hQYW5lbCIgbmFtZT0ianBQcml2aWxlZ2VzIj4KICAgICAgICAg ICAgPEV2ZW50cz4KICAgICAgICAgICAgICA8RXZlbnRIYW5kbGVyIGV2ZW50 PSJwcm9wZXJ0eUNoYW5nZSIgbGlzdGVuZXI9ImphdmEuYmVhbnMuUHJvcGVy dHlDaGFuZ2VMaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2YS5iZWFucy5Qcm9w ZXJ0eUNoYW5nZUV2ZW50IiBoYW5kbGVyPSJjaGVja1ByaXZpbGVnZUNoYW5n ZSIvPgogICAgICAgICAgICA8L0V2ZW50cz4KICAgICAgICAgICAgPEF1eFZh bHVlcz4KISAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVH ZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5n IiB2YWx1ZT0ianBQcml2aWxlZ2VzLnNldEVuYWJsZWQoZmFsc2UpOyIvPgoh ICAgICAgICAgICAgIDxBdXhWYWx1ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRv cl9DcmVhdGVDb2RlQ3VzdG9tIiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2 YWx1ZT0ibmV3IENoZWNrQm94UGFuZWwgKHByaXZpbGVnZXMsIENoZWNrQm94 UGFuZWwuVkVSVElDQUwsIEFkbWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1p blJlc291cmNlcy5ETEdfRURJVF9QUklWSUxFR0VTX1BSSVZJTEVHRVMpKTsi Lz4KICAgICAgICAgICAgPC9BdXhWYWx1ZXM+CiAgICAgICAgICAgIDxDb25z dHJhaW50cz4KICAgICAgICAgICAgICA8Q29uc3RyYWludCBsYXlvdXRDbGFz cz0ib3JnLm5ldGJlYW5zLm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMu RGVzaWduR3JpZEJhZ0xheW91dCIgdmFsdWU9Im9yZy5uZXRiZWFucy5tb2R1 bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLkRlc2lnbkdyaWRCYWdMYXlvdXQk R3JpZEJhZ0NvbnN0cmFpbnRzRGVzY3JpcHRpb24iPgohICAgICAgICAgICAg ICAgPEdyaWRCYWdDb25zdHJhaW50cyBncmlkWD0iMiIgZ3JpZFk9IjAiIGdy aWRXaWR0aD0iMSIgZ3JpZEhlaWdodD0iMCIgZmlsbD0iMSIgaXBhZFg9IjAi IGlwYWRZPSIwIiBpbnNldHNUb3A9IjMiIGluc2V0c0xlZnQ9IjAiIGluc2V0 c0JvdHRvbT0iMCIgaW5zZXRzUmlnaHQ9IjMiIGFuY2hvcj0iMTAiIHdlaWdo dFg9IjAuNSIgd2VpZ2h0WT0iMC4wIi8+CiAgICAgICAgICAgICAgPC9Db25z dHJhaW50PgogICAgICAgICAgICA8L0NvbnN0cmFpbnRzPgogIAotLS0gMTAy LDEyNiAtLS0tCiAgICAgICAgICAgIDxMYXlvdXQgY2xhc3M9Im9yZy5uZXRi ZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNj cm9sbFBhbmVTdXBwb3J0TGF5b3V0Ii8+CiAgICAgICAgICAgIDxTdWJDb21w b25lbnRzPgogICAgICAgICAgICAgIDxDb21wb25lbnQgY2xhc3M9ImNvbS5y ZWRoYXQucmhkYi5hZG1pbi5BZG1pbkxpc3QiIG5hbWU9ImpsR3JvdXBzIj4K KyAgICAgICAgICAgICAgIDxFdmVudHM+CisgICAgICAgICAgICAgICAgIDxF dmVudEhhbmRsZXIgZXZlbnQ9InZhbHVlQ2hhbmdlZCIgbGlzdGVuZXI9Imph dmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25MaXN0ZW5lciIgcGFyYW1l dGVycz0iamF2YXguc3dpbmcuZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50IiBo YW5kbGVyPSJqbEdyb3Vwc1ZhbHVlQ2hhbmdlZCIvPgorICAgICAgICAgICAg ICAgPC9FdmVudHM+CiAgICAgICAgICAgICAgICA8QXV4VmFsdWVzPgogICAg ICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0 b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1 ZT0iamxHcm91cHMuYWRkTGlzdFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBqYXZh eC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uTGlzdGVuZXIoKSB7JiN4YTsg ICAgICAgICAgICBwdWJsaWMgdm9pZCB2YWx1ZUNoYW5nZWQoamF2YXguc3dp bmcuZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50IGV2dCkgeyYjeGE7ICAgICAg ICAgICAgICAgIHVwZGF0ZVByaXZpbGVnZXMoKTsmI3hhOyAgICAgICAgICAg IH0mI3hhOyAgICAgICAgfSk7Ii8+CiAgICAgICAgICAgICAgICA8L0F1eFZh bHVlcz4KICAgICAgICAgICAgICA8L0NvbXBvbmVudD4KICAgICAgICAgICAg PC9TdWJDb21wb25lbnRzPgogICAgICAgICAgPC9Db250YWluZXI+CiEgICAg ICAgICA8Q29udGFpbmVyIGNsYXNzPSJjb20ucmVkaGF0LnJoZGIuYWRtaW4u UHJpdmlsZWdlc0NoZWNrQm94UGFuZWwiIG5hbWU9ImpwUHJpdmlsZWdlcyI+ CiAgICAgICAgICAgIDxFdmVudHM+CiAgICAgICAgICAgICAgPEV2ZW50SGFu ZGxlciBldmVudD0icHJvcGVydHlDaGFuZ2UiIGxpc3RlbmVyPSJqYXZhLmJl YW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHBhcmFtZXRlcnM9ImphdmEu YmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVudCIgaGFuZGxlcj0iY2hlY2tQcml2 aWxlZ2VDaGFuZ2UiLz4KICAgICAgICAgICAgPC9FdmVudHM+CiAgICAgICAg ICAgIDxBdXhWYWx1ZXM+CiEgICAgICAgICAgICAgPEF1eFZhbHVlIG5hbWU9 IkphdmFDb2RlR2VuZXJhdG9yX0NyZWF0ZUNvZGVDdXN0b20iIHR5cGU9Imph dmEubGFuZy5TdHJpbmciIHZhbHVlPSIgbmV3IFByaXZpbGVnZXNDaGVja0Jv eFBhbmVsIChwcml2aWxlZ2VzLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmco QWRtaW5SZXNvdXJjZXMuRExHX0VESVRfUFJJVklMRUdFU19QUklWSUxFR0VT KSwgZ3JhbnRPcHRpb25TdHJpbmcpOyIvPgogICAgICAgICAgICA8L0F1eFZh bHVlcz4KICAgICAgICAgICAgPENvbnN0cmFpbnRzPgogICAgICAgICAgICAg IDxDb25zdHJhaW50IGxheW91dENsYXNzPSJvcmcubmV0YmVhbnMubW9kdWxl cy5mb3JtLmNvbXBhdDIubGF5b3V0cy5EZXNpZ25HcmlkQmFnTGF5b3V0IiB2 YWx1ZT0ib3JnLm5ldGJlYW5zLm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91 dHMuRGVzaWduR3JpZEJhZ0xheW91dCRHcmlkQmFnQ29uc3RyYWludHNEZXNj cmlwdGlvbiI+CiEgICAgICAgICAgICAgICA8R3JpZEJhZ0NvbnN0cmFpbnRz IGdyaWRYPSIyIiBncmlkWT0iMiIgZ3JpZFdpZHRoPSIxIiBncmlkSGVpZ2h0 PSIwIiBmaWxsPSIxIiBpcGFkWD0iMCIgaXBhZFk9IjAiIGluc2V0c1RvcD0i MyIgaW5zZXRzTGVmdD0iMCIgaW5zZXRzQm90dG9tPSIwIiBpbnNldHNSaWdo dD0iMyIgYW5jaG9yPSIxMCIgd2VpZ2h0WD0iMC41IiB3ZWlnaHRZPSIwLjAi Lz4KICAgICAgICAgICAgICA8L0NvbnN0cmFpbnQ+CiAgICAgICAgICAgIDwv Q29uc3RyYWludHM+CiAgCkluZGV4OiBzcmMvY29tL3JlZGhhdC9yaGRiL2Fk bWluL0VkaXRQcml2aWxlZ2VzRGlhbG9nLmphdmEKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yaGRiL3NyYy9yaGRiL2d1aXRvb2xz L3JoZGItYWRtaW4vc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9FZGl0UHJp dmlsZWdlc0RpYWxvZy5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEu MS4xCmRpZmYgLWMgLXIxLjEuMS4xIEVkaXRQcml2aWxlZ2VzRGlhbG9nLmph dmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vRWRpdFByaXZpbGVn ZXNEaWFsb2cuamF2YQkyMSBOb3YgMjAwMyAxODozMDoyMiAtMDAwMAkxLjEu MS4xCi0tLSBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL0VkaXRQcml2aWxl Z2VzRGlhbG9nLmphdmEJOSBKdW4gMjAwNCAwNTozOToyMSAtMDAwMAoqKioq KioqKioqKioqKioKKioqIDEsNSAqKioqCiAgLyoqCiEgICogQ29weXJpZ2h0 IChjKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmlidXRl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UuCiAgICoKLS0tIDEsNSAtLS0tCiAgLyoqCiEgICogQ29w eXJpZ2h0IChjKSAyMDAzLCAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkg cmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKKioqKioqKioqKioqKioq CioqKiA3NCw4MCAqKioqCiAgICAgICAgICAgICAgcHJpdmlsZWdlcyA9IGRi bWQuZ2V0VmFsaWRTY2hlbWFQcml2aWxlZ2VzKCk7CiAgICAgICAgICBlbHNl IGlmIChpbnZvY2F0aW9uTm9kZSBpbnN0YW5jZW9mIERhdGFiYXNlTm9kZSkK ICAgICAgICAgICAgICBwcml2aWxlZ2VzID0gZGJtZC5nZXRWYWxpZERhdGFi YXNlUHJpdmlsZWdlcygpOwohICAgICAgICAgCiAgICAgICAgICBpbml0Q29t cG9uZW50cygpOwogICAgICAgICAgCiAgICAgICAgICAvLyB1cGRhdGUgdGl0 bGUKLS0tIDc0LDgyIC0tLS0KICAgICAgICAgICAgICBwcml2aWxlZ2VzID0g ZGJtZC5nZXRWYWxpZFNjaGVtYVByaXZpbGVnZXMoKTsKICAgICAgICAgIGVs c2UgaWYgKGludm9jYXRpb25Ob2RlIGluc3RhbmNlb2YgRGF0YWJhc2VOb2Rl KQogICAgICAgICAgICAgIHByaXZpbGVnZXMgPSBkYm1kLmdldFZhbGlkRGF0 YWJhc2VQcml2aWxlZ2VzKCk7CiEgCiEgCQlncmFudE9wdGlvblN0cmluZyA9 IGRibWQuZ2V0R3JhbnRPcHRpb25TdHJpbmcoKTsKISAJCQogICAgICAgICAg aW5pdENvbXBvbmVudHMoKTsKICAgICAgICAgIAogICAgICAgICAgLy8gdXBk YXRlIHRpdGxlCioqKioqKioqKioqKioqKgoqKiogMTI0LDEzMCAqKioqCiAg ICAgICAgICBqbFVzZXJzID0gbmV3IGNvbS5yZWRoYXQucmhkYi5hZG1pbi5B ZG1pbkxpc3QoKTsKICAgICAgICAgIGpzcEdyb3VwcyA9IG5ldyBqYXZheC5z d2luZy5KU2Nyb2xsUGFuZSgpOwogICAgICAgICAgamxHcm91cHMgPSBuZXcg Y29tLnJlZGhhdC5yaGRiLmFkbWluLkFkbWluTGlzdCgpOwohICAgICAgICAg anBQcml2aWxlZ2VzID0gbmV3IENoZWNrQm94UGFuZWwgKHByaXZpbGVnZXMs IENoZWNrQm94UGFuZWwuVkVSVElDQUwsIEFkbWluUmVzb3VyY2VzLmdldFN0 cmluZyhBZG1pblJlc291cmNlcy5ETEdfRURJVF9QUklWSUxFR0VTX1BSSVZJ TEVHRVMpKTsKICAgICAgICAgIGpwQnV0dG9ucyA9IG5ldyBqYXZheC5zd2lu Zy5KUGFuZWwoKTsKICAgICAgICAgIGpiT0sgPSBva0FjdGlvbi5nZXRCdXR0 b24oKTsKICAgICAgICAgIGpiQXBwbHkgPSBhcHBseUFjdGlvbi5nZXRCdXR0 b24oKTsKLS0tIDEyNiwxMzIgLS0tLQogICAgICAgICAgamxVc2VycyA9IG5l dyBjb20ucmVkaGF0LnJoZGIuYWRtaW4uQWRtaW5MaXN0KCk7CiAgICAgICAg ICBqc3BHcm91cHMgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUoKTsK ICAgICAgICAgIGpsR3JvdXBzID0gbmV3IGNvbS5yZWRoYXQucmhkYi5hZG1p bi5BZG1pbkxpc3QoKTsKISAgICAgICAgIGpwUHJpdmlsZWdlcyA9ICBuZXcg UHJpdmlsZWdlc0NoZWNrQm94UGFuZWwgKHByaXZpbGVnZXMsIEFkbWluUmVz b3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfRURJVF9QUklW SUxFR0VTX1BSSVZJTEVHRVMpLCBncmFudE9wdGlvblN0cmluZyk7CiAgICAg ICAgICBqcEJ1dHRvbnMgPSBuZXcgamF2YXguc3dpbmcuSlBhbmVsKCk7CiAg ICAgICAgICBqYk9LID0gb2tBY3Rpb24uZ2V0QnV0dG9uKCk7CiAgICAgICAg ICBqYkFwcGx5ID0gYXBwbHlBY3Rpb24uZ2V0QnV0dG9uKCk7CioqKioqKioq KioqKioqKgoqKiogMTQ1LDE1MCAqKioqCi0tLSAxNDcsMTU4IC0tLS0KICAg ICAgICAgICAgICAgICAgdXBkYXRlUHJpdmlsZWdlcygpOwogICAgICAgICAg ICAgIH0KICAgICAgICAgIH0pOworICAgICAgICAgamNiUHVibGljLmFkZEFj dGlvbkxpc3RlbmVyKG5ldyBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5l cigpIHsKKyAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3Jt ZWQoamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQgZXZ0KSB7CisgICAgICAg ICAgICAgICAgIGpjYlB1YmxpY0FjdGlvblBlcmZvcm1lZChldnQpOworICAg ICAgICAgICAgIH0KKyAgICAgICAgIH0pOworIAogICAgICAgICAgZ3JpZEJh Z0NvbnN0cmFpbnRzID0gbmV3IGphdmEuYXd0LkdyaWRCYWdDb25zdHJhaW50 cygpOwogICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFpbnRzLmdyaWR4ID0gMDsK ICAgICAgICAgIGdyaWRCYWdDb25zdHJhaW50cy5ncmlkeSA9IDA7CioqKioq KioqKioqKioqKgoqKiogMTc0LDE3OSAqKioqCi0tLSAxODIsMTkzIC0tLS0K ICAgICAgICAgICAgICAgICAgdXBkYXRlUHJpdmlsZWdlcygpOwogICAgICAg ICAgICAgIH0KICAgICAgICAgIH0pOworICAgICAgICAgamxVc2Vycy5hZGRM aXN0U2VsZWN0aW9uTGlzdGVuZXIobmV3IGphdmF4LnN3aW5nLmV2ZW50Lkxp c3RTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICBwdWJsaWMg dm9pZCB2YWx1ZUNoYW5nZWQoamF2YXguc3dpbmcuZXZlbnQuTGlzdFNlbGVj dGlvbkV2ZW50IGV2dCkgeworICAgICAgICAgICAgICAgICBqbFVzZXJzVmFs dWVDaGFuZ2VkKGV2dCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfSk7 CisgCiAgICAgICAgICBqc3BVc2Vycy5zZXRWaWV3cG9ydFZpZXcoamxVc2Vy cyk7CiAgCiAgICAgICAgICBncmlkQmFnQ29uc3RyYWludHMgPSBuZXcgamF2 YS5hd3QuR3JpZEJhZ0NvbnN0cmFpbnRzKCk7CioqKioqKioqKioqKioqKgoq KiogMTkwLDE5NSAqKioqCi0tLSAyMDQsMjE1IC0tLS0KICAgICAgICAgICAg ICAgICAgdXBkYXRlUHJpdmlsZWdlcygpOwogICAgICAgICAgICAgIH0KICAg ICAgICAgIH0pOworICAgICAgICAgamxHcm91cHMuYWRkTGlzdFNlbGVjdGlv bkxpc3RlbmVyKG5ldyBqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9u TGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgcHVibGljIHZvaWQgdmFsdWVD aGFuZ2VkKGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25FdmVudCBl dnQpIHsKKyAgICAgICAgICAgICAgICAgamxHcm91cHNWYWx1ZUNoYW5nZWQo ZXZ0KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9KTsKKyAKICAgICAg ICAgIGpzcEdyb3Vwcy5zZXRWaWV3cG9ydFZpZXcoamxHcm91cHMpOwogIAog ICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFpbnRzID0gbmV3IGphdmEuYXd0Lkdy aWRCYWdDb25zdHJhaW50cygpOwoqKioqKioqKioqKioqKioKKioqIDIwMSwy MDcgKioqKgogICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFpbnRzLmluc2V0cyA9 IG5ldyBqYXZhLmF3dC5JbnNldHMoMCwgMCwgMCwgMyk7CiAgICAgICAgICBq cE9wdGlvbnMuYWRkKGpzcEdyb3VwcywgZ3JpZEJhZ0NvbnN0cmFpbnRzKTsK ICAKLSAgICAgICAgIGpwUHJpdmlsZWdlcy5zZXRFbmFibGVkKGZhbHNlKTsK ICAgICAgICAgIGpwUHJpdmlsZWdlcy5hZGRQcm9wZXJ0eUNoYW5nZUxpc3Rl bmVyKG5ldyBqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7 CiAgICAgICAgICAgICAgcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoamF2 YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2dCkgewogICAgICAgICAg ICAgICAgICBjaGVja1ByaXZpbGVnZUNoYW5nZShldnQpOwotLS0gMjIxLDIy NiAtLS0tCioqKioqKioqKioqKioqKgoqKiogMjEwLDIxNiAqKioqCiAgCiAg ICAgICAgICBncmlkQmFnQ29uc3RyYWludHMgPSBuZXcgamF2YS5hd3QuR3Jp ZEJhZ0NvbnN0cmFpbnRzKCk7CiAgICAgICAgICBncmlkQmFnQ29uc3RyYWlu dHMuZ3JpZHggPSAyOwohICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFpbnRzLmdy aWR5ID0gMDsKICAgICAgICAgIGdyaWRCYWdDb25zdHJhaW50cy5ncmlkaGVp Z2h0ID0gamF2YS5hd3QuR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsK ICAgICAgICAgIGdyaWRCYWdDb25zdHJhaW50cy5maWxsID0gamF2YS5hd3Qu R3JpZEJhZ0NvbnN0cmFpbnRzLkJPVEg7CiAgICAgICAgICBncmlkQmFnQ29u c3RyYWludHMud2VpZ2h0eCA9IDAuNTsKLS0tIDIyOSwyMzUgLS0tLQogIAog ICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFpbnRzID0gbmV3IGphdmEuYXd0Lkdy aWRCYWdDb25zdHJhaW50cygpOwogICAgICAgICAgZ3JpZEJhZ0NvbnN0cmFp bnRzLmdyaWR4ID0gMjsKISAgICAgICAgIGdyaWRCYWdDb25zdHJhaW50cy5n cmlkeSA9IDI7CiAgICAgICAgICBncmlkQmFnQ29uc3RyYWludHMuZ3JpZGhl aWdodCA9IGphdmEuYXd0LkdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7 CiAgICAgICAgICBncmlkQmFnQ29uc3RyYWludHMuZmlsbCA9IGphdmEuYXd0 LkdyaWRCYWdDb25zdHJhaW50cy5CT1RIOwogICAgICAgICAgZ3JpZEJhZ0Nv bnN0cmFpbnRzLndlaWdodHggPSAwLjU7CioqKioqKioqKioqKioqKgoqKiog MjMzLDI0MyAqKioqCiAgICAgICAgICBzZXRTaXplKG5ldyBqYXZhLmF3dC5E aW1lbnNpb24oNTAwLCAzMDApKTsKICAgICAgfS8vR0VOLUVORDppbml0Q29t cG9uZW50cwogIAohICAgICBwcml2YXRlIHZvaWQgY2hlY2tQcml2aWxlZ2VD aGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2dCkgey8v R0VOLUZJUlNUOmV2ZW50X2NoZWNrUHJpdmlsZWdlQ2hhbmdlCiEgICAgICAg ICAvLyBBZGQgeW91ciBoYW5kbGluZyBjb2RlIGhlcmU6CiAgCQkKICAgICAg ICAgIC8vIGdldCBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIGxp c3RzCiAgICAgICAgICBpbnQgbnVtU2VsZWN0ZWQgPSBqbFVzZXJzLmdldFNl bGVjdGVkVmFsdWVzKCkubGVuZ3RoICsgamxHcm91cHMuZ2V0U2VsZWN0ZWRW YWx1ZXMoKS5sZW5ndGg7CiAgCQkKICAgICAgICAgIC8vIERpc2FibGUgYXBw bHkgYnV0dG9uLCBpZiBub25lIG9mIHRoZSBwcml2ZWxlZ2VzIGFyZSBjaGFu Z2VkIGR1cmluZyBzaW5nbGUgc2VsZWN0aW9uCiAgICAgICAgICAvLyBJbiBh bGwgb3RoZXIgY2FzZXMgZW5hYmxlIGl0LgotLS0gMjUyLDI4NyAtLS0tCiAg ICAgICAgICBzZXRTaXplKG5ldyBqYXZhLmF3dC5EaW1lbnNpb24oNTAwLCAz MDApKTsKICAgICAgfS8vR0VOLUVORDppbml0Q29tcG9uZW50cwogIAohIAlw cml2YXRlIHZvaWQgamNiUHVibGljQWN0aW9uUGVyZm9ybWVkKGphdmEuYXd0 LmV2ZW50LkFjdGlvbkV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X2pj YlB1YmxpY0FjdGlvblBlcmZvcm1lZAohIAkJYWRqdXN0R3JhbnRXaXRoQm94 ZXMoKTsKISAJfS8vR0VOLUxBU1Q6ZXZlbnRfamNiUHVibGljQWN0aW9uUGVy Zm9ybWVkCiEgCiEgCXByaXZhdGUgdm9pZCBqbEdyb3Vwc1ZhbHVlQ2hhbmdl ZChqYXZheC5zd2luZy5ldmVudC5MaXN0U2VsZWN0aW9uRXZlbnQgZXZ0KSB7 Ly9HRU4tRklSU1Q6ZXZlbnRfamxHcm91cHNWYWx1ZUNoYW5nZWQKISAJCWFk anVzdEdyYW50V2l0aEJveGVzKCk7CiEgCX0vL0dFTi1MQVNUOmV2ZW50X2ps R3JvdXBzVmFsdWVDaGFuZ2VkCiEgCiEgCXByaXZhdGUgdm9pZCBqbFVzZXJz VmFsdWVDaGFuZ2VkKGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25F dmVudCBldnQpIHsvL0dFTi1GSVJTVDpldmVudF9qbFVzZXJzVmFsdWVDaGFu Z2VkCiEgCQlhZGp1c3RHcmFudFdpdGhCb3hlcygpOwohIAl9Ly9HRU4tTEFT VDpldmVudF9qbFVzZXJzVmFsdWVDaGFuZ2VkCiEgCQohIAkvKioKISAJICog RW5hYmxlZCB0aGUgR1JBTlQgV0lUSCBPUFRJT04gb25seSBpZiBhcHBsaWNh YmxlCiEgCSAqLwohIAkKISAJcHJpdmF0ZSB2b2lkIGFkanVzdEdyYW50V2l0 aEJveGVzKCkgewohIAkJaWYgKGpsR3JvdXBzLmdldFNlbGVjdGVkVmFsdWVz KCkubGVuZ3RoID4gMCB8fCBqY2JQdWJsaWMuaXNTZWxlY3RlZCgpKSB7CiEg CQkJanBQcml2aWxlZ2VzLnNldFNlY29uZGFyeUNCRW5hYmxlZChmYWxzZSk7 CiEgCQl9IGVsc2UgewohIAkJCWpwUHJpdmlsZWdlcy5zZXRTZWNvbmRhcnlD QkVuYWJsZWQodHJ1ZSk7CiEgCQl9CiEgCX0KISAJCiEgCXByaXZhdGUgdm9p ZCBjaGVja1ByaXZpbGVnZUNoYW5nZShqYXZhLmJlYW5zLlByb3BlcnR5Q2hh bmdlRXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6ZXZlbnRfY2hlY2tQcml2aWxl Z2VDaGFuZ2UKISAJCSAvLyBBZGQgeW91ciBoYW5kbGluZyBjb2RlIGhlcmU6 CiAgCQkKICAgICAgICAgIC8vIGdldCBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRl bXMgaW4gdGhlIGxpc3RzCiAgICAgICAgICBpbnQgbnVtU2VsZWN0ZWQgPSBq bFVzZXJzLmdldFNlbGVjdGVkVmFsdWVzKCkubGVuZ3RoICsgamxHcm91cHMu Z2V0U2VsZWN0ZWRWYWx1ZXMoKS5sZW5ndGg7CisgCQludW1TZWxlY3RlZCAr PSB0aGlzLmpjYlB1YmxpYy5pc1NlbGVjdGVkKCkgPyBudW1TZWxlY3RlZCsx IDogbnVtU2VsZWN0ZWQ7CiAgCQkKICAgICAgICAgIC8vIERpc2FibGUgYXBw bHkgYnV0dG9uLCBpZiBub25lIG9mIHRoZSBwcml2ZWxlZ2VzIGFyZSBjaGFu Z2VkIGR1cmluZyBzaW5nbGUgc2VsZWN0aW9uCiAgICAgICAgICAvLyBJbiBh bGwgb3RoZXIgY2FzZXMgZW5hYmxlIGl0LgoqKioqKioqKioqKioqKioKKioq IDI0NiwyNTIgKioqKgogICAgICAgICAgICAgIGpiQXBwbHkuc2V0RW5hYmxl ZChmYWxzZSk7CiAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgIGpiQXBw bHkuc2V0RW5hYmxlZCh0cnVlKTsKISAgICAgfS8vR0VOLUxBU1Q6ZXZlbnRf Y2hlY2tQcml2aWxlZ2VDaGFuZ2UKICAgICAgCiAgICAgIC8qKiBDbG9zZXMg dGhlIGRpYWxvZyAqLwogICAgICBwcml2YXRlIHZvaWQgY2xvc2VEaWFsb2co amF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6 ZXZlbnRfY2xvc2VEaWFsb2cKLS0tIDI5MCwyOTcgLS0tLQogICAgICAgICAg ICAgIGpiQXBwbHkuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICBlbHNl IAogICAgICAgICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKISAK ISAJfS8vR0VOLUxBU1Q6ZXZlbnRfY2hlY2tQcml2aWxlZ2VDaGFuZ2UKICAg ICAgCiAgICAgIC8qKiBDbG9zZXMgdGhlIGRpYWxvZyAqLwogICAgICBwcml2 YXRlIHZvaWQgY2xvc2VEaWFsb2coamF2YS5hd3QuZXZlbnQuV2luZG93RXZl bnQgZXZ0KSB7Ly9HRU4tRklSU1Q6ZXZlbnRfY2xvc2VEaWFsb2cKKioqKioq KioqKioqKioqCioqKiAyOTMsMzAwICoqKioKICAgICAgICAgIEhhc2h0YWJs ZSBwYXJhbWV0ZXJzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICAgT2Jq ZWN0W10gdXNlcnMgPSBqbFVzZXJzLmdldFNlbGVjdGVkVmFsdWVzKCk7CiAg ICAgICAgICBPYmplY3RbXSBncm91cHMgPSBqbEdyb3Vwcy5nZXRTZWxlY3Rl ZFZhbHVlcygpOwohICAgICAgICAgU3RyaW5nW10gcHJpdmlsZWdlcyA9IGpw UHJpdmlsZWdlcy5nZXRTZWxlY3RlZEJveGVzKCk7CiEgICAgICAgICAKICAg ICAgICAgIC8vIEFkZCB0aGUgZW50cmllcyBpbnRvIHRoZSBoYXNoIHRhYmxl CiAgICAgICAgICAKICAgICAgICAgIGlmIChqY2JQdWJsaWMuaXNTZWxlY3Rl ZCgpKQotLS0gMzM4LDM0NiAtLS0tCiAgICAgICAgICBIYXNodGFibGUgcGFy YW1ldGVycyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgIE9iamVjdFtd IHVzZXJzID0gamxVc2Vycy5nZXRTZWxlY3RlZFZhbHVlcygpOwogICAgICAg ICAgT2JqZWN0W10gZ3JvdXBzID0gamxHcm91cHMuZ2V0U2VsZWN0ZWRWYWx1 ZXMoKTsKISAgICAgICAgIFN0cmluZ1tdIHByaXZpbGVnZXMgPSBqcFByaXZp bGVnZXMuZ2V0UHJpbWFyeU9ubHlTZWxlY3RlZEJveGVzKCk7CiEgCQlTdHJp bmdbXSBwcml2aWxlZ2VzV2l0aEdyYW50ID0ganBQcml2aWxlZ2VzLmdldFNl bGVjdGVkU2Vjb25kYXJ5Qm94ZXMoKTsKISAJCQogICAgICAgICAgLy8gQWRk IHRoZSBlbnRyaWVzIGludG8gdGhlIGhhc2ggdGFibGUKICAgICAgICAgIAog ICAgICAgICAgaWYgKGpjYlB1YmxpYy5pc1NlbGVjdGVkKCkpCioqKioqKioq KioqKioqKgoqKiogMzIyLDMyOCAqKioqCiAgICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHByaXZpbGVnZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAg ICAgcHJpdmlsZWdlU2V0LnB1dChwcml2aWxlZ2VzW2ldLCBwcml2aWxlZ2Vz W2ldKTsKICAgICAgICAgIAohICAgICAgICAgLy8gQWRkIGNhbGxpbmcgb2Jq ZWN0CiAgICAgICAgICBIYXNodGFibGUgb2JqZWN0U2V0ID0gbmV3IEhhc2h0 YWJsZSgpOwogICAgICAgICAgb2JqZWN0U2V0LnB1dChpbnZvY2F0aW9uTm9k ZS50b1N0cmluZygpLCBpbnZvY2F0aW9uTm9kZS50b1N0cmluZygpKTsKICAg ICAgICAgIAotLS0gMzY4LDM4MCAtLS0tCiAgICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHByaXZpbGVnZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAg ICAgcHJpdmlsZWdlU2V0LnB1dChwcml2aWxlZ2VzW2ldLCBwcml2aWxlZ2Vz W2ldKTsKICAgICAgICAgIAohICAgICAgICAgLy8gQWRkIHByaXZpbGVnZXMK ISAgICAgICAgIEhhc2h0YWJsZSBwcml2aWxlZ2VXaXRoR3JhbnRTZXQgPSBu ZXcgSGFzaHRhYmxlKCk7CiEgICAgICAgICAKISAgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgcHJpdmlsZWdlc1dpdGhHcmFudC5sZW5ndGg7IGkrKykK ISAgICAgICAgICAgICBwcml2aWxlZ2VXaXRoR3JhbnRTZXQucHV0KHByaXZp bGVnZXNXaXRoR3JhbnRbaV0sIHByaXZpbGVnZXNXaXRoR3JhbnRbaV0pOwoh IAkJCiEgCQkvLyBBZGQgY2FsbGluZyBvYmplY3QKICAgICAgICAgIEhhc2h0 YWJsZSBvYmplY3RTZXQgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgICBv YmplY3RTZXQucHV0KGludm9jYXRpb25Ob2RlLnRvU3RyaW5nKCksIGludm9j YXRpb25Ob2RlLnRvU3RyaW5nKCkpOwogICAgICAgICAgCioqKioqKioqKioq KioqKgoqKiogMzM3LDM0MiAqKioqCi0tLSAzODksMzk1IC0tLS0KICAgICAg ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5Q QVJBTV9TQ0hFTUFfTkFNRSwgKChGdW5jdGlvbk5vZGUpIGludm9jYXRpb25O b2RlKS5nZXRQYXJlbnRTY2hlbWFOYW1lKCkpOwogICAgICAgICAgICAgICAg ICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0ZVTkNU SU9OUywgb2JqZWN0U2V0KTsKICAgICAgICAgICAgICAgICAgICAgIHBhcmFt ZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9GVU5DVElPTl9QUklWSUxF R0VTLCBwcml2aWxlZ2VTZXQpOworIAkJCQkJcGFyYW1ldGVycy5wdXQoT2Jq ZWN0VXBkYXRlLlBBUkFNX0ZVTkNUSU9OX1BSSVZJTEVHRVNfV0lUSF9HUkFO VCwgcHJpdmlsZWdlV2l0aEdyYW50U2V0KTsKICAgICAgICAgICAgICAgICAg ICAgIFByaXZpbGVnZXNVcGRhdGUudXBkYXRlUHJpdmlsZWdlcyhiYWNrZW5k Q2xpZW50LCBwYXJhbWV0ZXJzKTsKICAJCSAgICAKICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChpbnZvY2F0aW9uTm9kZSBpbnN0YW5jZW9mIExhbmd1 YWdlTm9kZSkgewoqKioqKioqKioqKioqKioKKioqIDM0NSwzNTEgKioqKgog ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBk YXRlLlBBUkFNX0RCX05BTUUsICgoTGFuZ3VhZ2VOb2RlKSBpbnZvY2F0aW9u Tm9kZSkuZ2V0UGFyZW50RGF0YWJhc2VOYW1lKCkpOwogICAgICAgICAgICAg ICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0xB TkdVQUdFUywgb2JqZWN0U2V0KTsKICAgICAgICAgICAgICAgICAgICAgIHBh cmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9MQU5HVUFHRV9QUklW SUxFR0VTLCBwcml2aWxlZ2VTZXQpOwohICAgICAgICAgICAgICAgICAgICAg UHJpdmlsZWdlc1VwZGF0ZS51cGRhdGVQcml2aWxlZ2VzKGJhY2tlbmRDbGll bnQsIHBhcmFtZXRlcnMpOwogIAkJICAgIAogICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKGludm9jYXRpb25Ob2RlIGluc3RhbmNlb2YgU2VxdWVuY2VO b2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAvLyBTZXF1ZW5jZXMKLS0t IDM5OCw0MDUgLS0tLQogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy cy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0RCX05BTUUsICgoTGFuZ3VhZ2VO b2RlKSBpbnZvY2F0aW9uTm9kZSkuZ2V0UGFyZW50RGF0YWJhc2VOYW1lKCkp OwogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0 VXBkYXRlLlBBUkFNX0xBTkdVQUdFUywgb2JqZWN0U2V0KTsKICAgICAgICAg ICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJB TV9MQU5HVUFHRV9QUklWSUxFR0VTLCBwcml2aWxlZ2VTZXQpOwohICAgICAg ICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBB UkFNX0xBTkdVQUdFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCwgcHJpdmlsZWdl V2l0aEdyYW50U2V0KTsKISAJCQkJCVByaXZpbGVnZXNVcGRhdGUudXBkYXRl UHJpdmlsZWdlcyhiYWNrZW5kQ2xpZW50LCBwYXJhbWV0ZXJzKTsKICAJCSAg ICAKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnZvY2F0aW9uTm9k ZSBpbnN0YW5jZW9mIFNlcXVlbmNlTm9kZSkgewogICAgICAgICAgICAgICAg ICAgICAgLy8gU2VxdWVuY2VzCioqKioqKioqKioqKioqKgoqKiogMzU0LDM2 MCAqKioqCiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChP YmplY3RVcGRhdGUuUEFSQU1fU0NIRU1BX05BTUUsICgoU2VxdWVuY2VOb2Rl KSBpbnZvY2F0aW9uTm9kZSkuZ2V0UGFyZW50U2NoZW1hTmFtZSgpKTsKICAg ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0 ZS5QQVJBTV9TRVFVRU5DRVMsIG9iamVjdFNldCk7CiAgICAgICAgICAgICAg ICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fU0VR VUVOQ0VfUFJJVklMRUdFUywgcHJpdmlsZWdlU2V0KTsKISAgICAgICAgICAg ICAgICAgICAgIFByaXZpbGVnZXNVcGRhdGUudXBkYXRlUHJpdmlsZWdlcyhi YWNrZW5kQ2xpZW50LCBwYXJhbWV0ZXJzKTsKICAKICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChpbnZvY2F0aW9uTm9kZSBpbnN0YW5jZW9mIFRhYmxl Tm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gVGFibGVzCi0tLSA0 MDgsNDE1IC0tLS0KICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMu cHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9TQ0hFTUFfTkFNRSwgKChTZXF1ZW5j ZU5vZGUpIGludm9jYXRpb25Ob2RlKS5nZXRQYXJlbnRTY2hlbWFOYW1lKCkp OwogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0 VXBkYXRlLlBBUkFNX1NFUVVFTkNFUywgb2JqZWN0U2V0KTsKICAgICAgICAg ICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJB TV9TRVFVRU5DRV9QUklWSUxFR0VTLCBwcml2aWxlZ2VTZXQpOwohICAgICAg ICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBB UkFNX1NFUVVFTkNFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCwgcHJpdmlsZWdl V2l0aEdyYW50U2V0KTsKISAJCQkJCVByaXZpbGVnZXNVcGRhdGUudXBkYXRl UHJpdmlsZWdlcyhiYWNrZW5kQ2xpZW50LCBwYXJhbWV0ZXJzKTsKICAKICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnZvY2F0aW9uTm9kZSBpbnN0 YW5jZW9mIFRhYmxlTm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgLy8g VGFibGVzCioqKioqKioqKioqKioqKgoqKiogMzYzLDM2OSAqKioqCiAgICAg ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUu UEFSQU1fU0NIRU1BX05BTUUsICgoVGFibGVOb2RlKSBpbnZvY2F0aW9uTm9k ZSkuZ2V0UGFyZW50U2NoZW1hTmFtZSgpKTsKICAgICAgICAgICAgICAgICAg ICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9UQUJMRVMs IG9iamVjdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz LnB1dChPYmplY3RVcGRhdGUuUEFSQU1fVEFCTEVfUFJJVklMRUdFUywgcHJp dmlsZWdlU2V0KTsKISAgICAgICAgICAgICAgICAgICAgIFByaXZpbGVnZXNV cGRhdGUudXBkYXRlUHJpdmlsZWdlcyhiYWNrZW5kQ2xpZW50LCBwYXJhbWV0 ZXJzKTsKICAKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnZvY2F0 aW9uTm9kZSBpbnN0YW5jZW9mIFZpZXdOb2RlKSB7CiAgICAgICAgICAgICAg ICAgICAgICAvLyBWaWV3cwotLS0gNDE4LDQyNSAtLS0tCiAgICAgICAgICAg ICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1f U0NIRU1BX05BTUUsICgoVGFibGVOb2RlKSBpbnZvY2F0aW9uTm9kZSkuZ2V0 UGFyZW50U2NoZW1hTmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgIHBh cmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9UQUJMRVMsIG9iamVj dFNldCk7CiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChP YmplY3RVcGRhdGUuUEFSQU1fVEFCTEVfUFJJVklMRUdFUywgcHJpdmlsZWdl U2V0KTsKISAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9i amVjdFVwZGF0ZS5QQVJBTV9UQUJMRV9QUklWSUxFR0VTX1dJVEhfR1JBTlQs IHByaXZpbGVnZVdpdGhHcmFudFNldCk7CiEgCQkJCQlQcml2aWxlZ2VzVXBk YXRlLnVwZGF0ZVByaXZpbGVnZXMoYmFja2VuZENsaWVudCwgcGFyYW1ldGVy cyk7CiAgCiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW52b2NhdGlv bk5vZGUgaW5zdGFuY2VvZiBWaWV3Tm9kZSkgewogICAgICAgICAgICAgICAg ICAgICAgLy8gVmlld3MKKioqKioqKioqKioqKioqCioqKiAzNzIsNDAwICoq KioKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVj dFVwZGF0ZS5QQVJBTV9TQ0hFTUFfTkFNRSwgKChWaWV3Tm9kZSkgaW52b2Nh dGlvbk5vZGUpLmdldFBhcmVudFNjaGVtYU5hbWUoKSk7CiAgICAgICAgICAg ICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1f VklFV1MsIG9iamVjdFNldCk7CiAgICAgICAgICAgICAgICAgICAgICBwYXJh bWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fVklFV19QUklWSUxFR0VT LCBwcml2aWxlZ2VTZXQpOwohICAgICAgICAgICAgICAgICAgICAgUHJpdmls ZWdlc1VwZGF0ZS51cGRhdGVQcml2aWxlZ2VzKGJhY2tlbmRDbGllbnQsIHBh cmFtZXRlcnMpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludm9j YXRpb25Ob2RlIGluc3RhbmNlb2YgU2NoZW1hTm9kZSkgewogICAgICAgICAg ICAgICAgICAgICAgLy8gU2NoZW1hcwogICAgICAgICAgICAgICAgICAgICAg cGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0NMVVNURVJfTkFN RSwgKChTY2hlbWFOb2RlKSBpbnZvY2F0aW9uTm9kZSkuZ2V0UGFyZW50Q2x1 c3Rlck5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz LnB1dChPYmplY3RVcGRhdGUuUEFSQU1fREJfTkFNRSwgKChTY2hlbWFOb2Rl KSBpbnZvY2F0aW9uTm9kZSkuZ2V0UGFyZW50RGF0YWJhc2VOYW1lKCkpOwog ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBk YXRlLlBBUkFNX1NDSEVNQVMsIG9iamVjdFNldCk7CiAgICAgICAgICAgICAg ICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fU0NI RU1BX1BSSVZJTEVHRVMsIHByaXZpbGVnZVNldCk7CiEgICAgICAgICAgICAg ICAgICAgICBQcml2aWxlZ2VzVXBkYXRlLnVwZGF0ZVByaXZpbGVnZXMoYmFj a2VuZENsaWVudCwgcGFyYW1ldGVycyk7CiAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoaW52b2NhdGlvbk5vZGUgaW5zdGFuY2VvZiBEYXRhYmFzZU5v ZGUpIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFiYXNlcwogICAg ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRl LlBBUkFNX0NMVVNURVJfTkFNRSwgKChEYXRhYmFzZU5vZGUpIGludm9jYXRp b25Ob2RlKS5nZXRQYXJlbnRDbHVzdGVyTmFtZSgpKTsKICAgICAgICAgICAg ICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9E Ql9OQU1FLCBpbnZvY2F0aW9uTm9kZS50b1N0cmluZygpKTsKICAgICAgICAg ICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJB TV9EQVRBQkFTRVMsIG9iamVjdFNldCk7CiAgICAgICAgICAgICAgICAgICAg ICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fREFUQUJBU0Vf UFJJVklMRUdFUywgcHJpdmlsZWdlU2V0KTsKISAgICAgICAgICAgICAgICAg ICAgIFByaXZpbGVnZXNVcGRhdGUudXBkYXRlUHJpdmlsZWdlcyhiYWNrZW5k Q2xpZW50LCBwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICAgICAgfQogIAog ICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uTm9kZS5yZWxvYWRWaWV3KGJh Y2tlbmRDbGllbnQpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgLy8gUmVzZXQgdGhlIHByaXZpbGVnZXMgcGFuZWwuCiAgICAgICAg ICAgICAgICAgIGludFtdIGp1c3RBcHBsaWVkID0ganBQcml2aWxlZ2VzLmdl dFNlbGVjdGVkSW5kZXhlcygpOwogICAgICAgICAgICAgICAgICBqcFByaXZp bGVnZXMucmVzZXQoKTsKICAgICAgICAgICAgICAgICAganBQcml2aWxlZ2Vz LnNldFNlbGVjdGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUpOwogICAgICAg ICAgICAgICAgICAKICAgICAgICAgIH0gY2F0Y2ggKE9iamVjdFVwZGF0ZUV4 Y2VwdGlvbiBlKSB7CiAgCQllLnByaW50U3RhY2tUcmFjZSgpOwotLS0gNDI4 LDQ2MSAtLS0tCiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1 dChPYmplY3RVcGRhdGUuUEFSQU1fU0NIRU1BX05BTUUsICgoVmlld05vZGUp IGludm9jYXRpb25Ob2RlKS5nZXRQYXJlbnRTY2hlbWFOYW1lKCkpOwogICAg ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRl LlBBUkFNX1ZJRVdTLCBvYmplY3RTZXQpOwogICAgICAgICAgICAgICAgICAg ICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX1ZJRVdfUFJJ VklMRUdFUywgcHJpdmlsZWdlU2V0KTsKISAgICAgICAgICAgICAgICAgICAg IHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9WSUVXX1BSSVZJ TEVHRVNfV0lUSF9HUkFOVCwgcHJpdmlsZWdlV2l0aEdyYW50U2V0KTsKISAJ CQkJCVByaXZpbGVnZXNVcGRhdGUudXBkYXRlUHJpdmlsZWdlcyhiYWNrZW5k Q2xpZW50LCBwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICAgICAgfSBlbHNl IGlmIChpbnZvY2F0aW9uTm9kZSBpbnN0YW5jZW9mIFNjaGVtYU5vZGUpIHsK ICAgICAgICAgICAgICAgICAgICAgIC8vIFNjaGVtYXMKICAgICAgICAgICAg ICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9D TFVTVEVSX05BTUUsICgoU2NoZW1hTm9kZSkgaW52b2NhdGlvbk5vZGUpLmdl dFBhcmVudENsdXN0ZXJOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAg cGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0RCX05BTUUsICgo U2NoZW1hTm9kZSkgaW52b2NhdGlvbk5vZGUpLmdldFBhcmVudERhdGFiYXNl TmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0 KE9iamVjdFVwZGF0ZS5QQVJBTV9TQ0hFTUFTLCBvYmplY3RTZXQpOwogICAg ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRl LlBBUkFNX1NDSEVNQV9QUklWSUxFR0VTLCBwcml2aWxlZ2VTZXQpOwohICAg ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRl LlBBUkFNX1NDSEVNQV9QUklWSUxFR0VTX1dJVEhfR1JBTlQsIHByaXZpbGVn ZVdpdGhHcmFudFNldCk7CiEgCQkJCQlQcml2aWxlZ2VzVXBkYXRlLnVwZGF0 ZVByaXZpbGVnZXMoYmFja2VuZENsaWVudCwgcGFyYW1ldGVycyk7CiAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW52b2NhdGlvbk5vZGUgaW5zdGFu Y2VvZiBEYXRhYmFzZU5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgIC8v IERhdGFiYXNlcwogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5w dXQoT2JqZWN0VXBkYXRlLlBBUkFNX0NMVVNURVJfTkFNRSwgKChEYXRhYmFz ZU5vZGUpIGludm9jYXRpb25Ob2RlKS5nZXRQYXJlbnRDbHVzdGVyTmFtZSgp KTsKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVj dFVwZGF0ZS5QQVJBTV9EQl9OQU1FLCBpbnZvY2F0aW9uTm9kZS50b1N0cmlu ZygpKTsKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9i amVjdFVwZGF0ZS5QQVJBTV9EQVRBQkFTRVMsIG9iamVjdFNldCk7CiAgICAg ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUu UEFSQU1fREFUQUJBU0VfUFJJVklMRUdFUywgcHJpdmlsZWdlU2V0KTsKISAg ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0 ZS5QQVJBTV9EQVRBQkFTRV9QUklWSUxFR0VTX1dJVEhfR1JBTlQsIHByaXZp bGVnZVdpdGhHcmFudFNldCk7CiEgCQkJCQlQcml2aWxlZ2VzVXBkYXRlLnVw ZGF0ZVByaXZpbGVnZXMoYmFja2VuZENsaWVudCwgcGFyYW1ldGVycyk7CiAg ICAgICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgICAgICAgaW52b2Nh dGlvbk5vZGUucmVsb2FkVmlldyhiYWNrZW5kQ2xpZW50KTsKICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwcml2 aWxlZ2VzIHBhbmVsLgogICAgICAgICAgICAgICAgICBpbnRbXSBqdXN0QXBw bGllZCA9IGpwUHJpdmlsZWdlcy5nZXRTZWxlY3RlZEluZGV4ZXMoKTsKKyAJ CQkJaW50W10ganVzdEFwcGxpZWRPcHRpb25zID0ganBQcml2aWxlZ2VzLmdl dFNlbGVjdGVkU2Vjb25kYXJ5SW5kZXhlcygpOwogICAgICAgICAgICAgICAg ICBqcFByaXZpbGVnZXMucmVzZXQoKTsKICAgICAgICAgICAgICAgICAganBQ cml2aWxlZ2VzLnNldFNlbGVjdGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUp OworIAkJCQlqcFByaXZpbGVnZXMuc2V0U2VsZWN0ZWRTZWNvbmRhcnlCb3hl cyhqdXN0QXBwbGllZE9wdGlvbnMsIHRydWUpOwogICAgICAgICAgICAgICAg ICAKICAgICAgICAgIH0gY2F0Y2ggKE9iamVjdFVwZGF0ZUV4Y2VwdGlvbiBl KSB7CiAgCQllLnByaW50U3RhY2tUcmFjZSgpOwoqKioqKioqKioqKioqKioK KioqIDQzNCw0NDQgKioqKgogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGludm9jYXRpb25Ob2RlIGluc3RhbmNlb2YgVGFibGVOb2RlKSB7CiAgICAg ICAgICAgICAgICAgICAgICBkYm1kID0gdGhpcy5iYWNrZW5kQ2xpZW50Lmdl dEFkbWluRGF0YWJhc2VNZXRhRGF0YSgoKFRhYmxlTm9kZSkgaW52b2NhdGlv bk5vZGUpLmdldFBhcmVudENsdXN0ZXJOYW1lKCksICgoVGFibGVOb2RlKSBp bnZvY2F0aW9uTm9kZSkuZ2V0UGFyZW50RGF0YWJhc2VOYW1lKCkpOwogICAg ICAgICAgICAgICAgICAgICAgU3RyaW5nW11bXSB0YWJsZVByaXZpbGVnZXMg PSBiYWNrZW5kQ2xpZW50LnJlc3VsdFNldFRvU3RyaW5nQXJyYXkoZGJtZC5n ZXRUYWJsZVByaXZpbGVnZXMobnVsbCwgKChUYWJsZU5vZGUpIGludm9jYXRp b25Ob2RlKS5nZXRQYXJlbnRTY2hlbWFOYW1lKCksIGludm9jYXRpb25Ob2Rl LnRvU3RyaW5nKCkpLCAobmV3IFByb2Nlc3NMZWFzZSgpKSk7CiEgCQkJCQlv YmpQcml2aWxlZ2VzID0gbmV3IFN0cmluZ1t0YWJsZVByaXZpbGVnZXMubGVu Z3RoXVsyXTsKICAKICAJCQkJCWZvciAoaW50IGk9MDsgaSA8IHRhYmxlUHJp dmlsZWdlcy5sZW5ndGg7IGkrKykgewogIAkJCQkJCW9ialByaXZpbGVnZXNb aV1bMF0gPSB0YWJsZVByaXZpbGVnZXNbaV1bNF07CiAgCQkJCQkJb2JqUHJp dmlsZWdlc1tpXVsxXSA9IHRhYmxlUHJpdmlsZWdlc1tpXVs1XTsKICAJCQkJ CX0KICAJCQkJCQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludm9j YXRpb25Ob2RlIGluc3RhbmNlb2YgVmlld05vZGUpIHsKLS0tIDQ5NSw1MDkg LS0tLQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludm9jYXRpb25O b2RlIGluc3RhbmNlb2YgVGFibGVOb2RlKSB7CiAgICAgICAgICAgICAgICAg ICAgICBkYm1kID0gdGhpcy5iYWNrZW5kQ2xpZW50LmdldEFkbWluRGF0YWJh c2VNZXRhRGF0YSgoKFRhYmxlTm9kZSkgaW52b2NhdGlvbk5vZGUpLmdldFBh cmVudENsdXN0ZXJOYW1lKCksICgoVGFibGVOb2RlKSBpbnZvY2F0aW9uTm9k ZSkuZ2V0UGFyZW50RGF0YWJhc2VOYW1lKCkpOwogICAgICAgICAgICAgICAg ICAgICAgU3RyaW5nW11bXSB0YWJsZVByaXZpbGVnZXMgPSBiYWNrZW5kQ2xp ZW50LnJlc3VsdFNldFRvU3RyaW5nQXJyYXkoZGJtZC5nZXRUYWJsZVByaXZp bGVnZXMobnVsbCwgKChUYWJsZU5vZGUpIGludm9jYXRpb25Ob2RlKS5nZXRQ YXJlbnRTY2hlbWFOYW1lKCksIGludm9jYXRpb25Ob2RlLnRvU3RyaW5nKCkp LCAobmV3IFByb2Nlc3NMZWFzZSgpKSk7CiEgCQkJCQlvYmpQcml2aWxlZ2Vz ID0gbmV3IFN0cmluZ1t0YWJsZVByaXZpbGVnZXMubGVuZ3RoXVs0XTsKICAK ICAJCQkJCWZvciAoaW50IGk9MDsgaSA8IHRhYmxlUHJpdmlsZWdlcy5sZW5n dGg7IGkrKykgewogIAkJCQkJCW9ialByaXZpbGVnZXNbaV1bMF0gPSB0YWJs ZVByaXZpbGVnZXNbaV1bNF07CiAgCQkJCQkJb2JqUHJpdmlsZWdlc1tpXVsx XSA9IHRhYmxlUHJpdmlsZWdlc1tpXVs1XTsKKyAJCQkJCQkKKyAJCQkJCQkv LyBbaV1bMl0gd291bGQgYmUgR1JBTlRPUi4uIHdlIGRvbid0IGNhcmUgYWJv dXQgdGhhdCBoZXJlLCBza2lwIGl0CisgCQkJCQkJCisgCQkJCQkJb2JqUHJp dmlsZWdlc1tpXVszXSA9IHRhYmxlUHJpdmlsZWdlc1tpXVs2XTsKICAJCQkJ CX0KICAJCQkJCQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludm9j YXRpb25Ob2RlIGluc3RhbmNlb2YgVmlld05vZGUpIHsKKioqKioqKioqKioq KioqCioqKiA0OTQsNTA2ICoqKioKICAgICAgICAgICAgICAgICAgICAgIGpw UHJpdmlsZWdlcy5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgaWYg KHNlbGVjdGVkVXNlcnMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9ialByaXYubGVuZ3Ro OyBpKyspIHsKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9i alByaXZbaV1bMF0uZXF1YWxzKHNlbGVjdGVkVXNlcnNbMF0udG9TdHJpbmco KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcFByaXZp bGVnZXMuc2V0U2VsZWN0ZWRCb3gob2JqUHJpdltpXVsxXSwgdHJ1ZSk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG9ialByaXYubGVuZ3RoOyBpKyspIAohICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAob2JqUHJpdltpXVswXS5lcXVhbHMo Imdyb3VwICIgKyBzZWxlY3RlZEdyb3Vwc1swXS50b1N0cmluZygpKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwUHJpdmlsZWdlcy5z ZXRTZWxlY3RlZEJveChvYmpQcml2W2ldWzFdLCB0cnVlKTsKICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGpiQXBwbHku c2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICAgICAgICAgIH0gICAgCi0t LSA1NTksNTc5IC0tLS0KICAgICAgICAgICAgICAgICAgICAgIGpwUHJpdmls ZWdlcy5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVj dGVkVXNlcnMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9ialByaXYubGVuZ3RoOyBpKysp IHsKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9ialByaXZb aV1bMF0uZXF1YWxzKHNlbGVjdGVkVXNlcnNbMF0udG9TdHJpbmcoKSkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwUHJpdmlsZWdl cy5zZXRTZWxlY3RlZEJveChvYmpQcml2W2ldWzFdLCB0cnVlKTsKKyAJCQkJ CQkJCQorIAkJCQkJCQkJaWYgKG9ialByaXZbaV1bM10uZXF1YWxzKCJZRVMi KSkKKyAJCQkJCQkJCQlqcFByaXZpbGVnZXMuc2V0U2VsZWN0ZWRTZWNvbmRh cnlCb3gob2JqUHJpdltpXVsxXSwgdHJ1ZSk7CisgCQkJCQkJCX0KICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgb2JqUHJpdi5sZW5ndGg7IGkrKykgCiEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChvYmpQcml2W2ldWzBdLmVxdWFscygiZ3Jv dXAgIiArIHNlbGVjdGVkR3JvdXBzWzBdLnRvU3RyaW5nKCkpKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcFByaXZpbGVnZXMuc2V0 U2VsZWN0ZWRCb3gob2JqUHJpdltpXVsxXSwgdHJ1ZSk7CisgCQkJCQkJCQkK KyAJCQkJCQkJCWlmIChvYmpQcml2W2ldWzNdLmVxdWFscygiWUVTIikpCisg CQkJCQkJCQkJanBQcml2aWxlZ2VzLnNldFNlbGVjdGVkU2Vjb25kYXJ5Qm94 KG9ialByaXZbaV1bMV0sIHRydWUpOworIAkJCQkJCQl9CiAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBqYkFwcGx5LnNl dEVuYWJsZWQoZmFsc2UpOwogICAgICAgICAgICAgICAgICB9ICAgIAoqKioq KioqKioqKioqKioKKioqIDUxNiw1MzAgKioqKgogICAgICAgICAgICAgIFN0 cmluZ1tdW10gb2JqUHJpdiA9IGdldFByaXZpbGVnZXMoKTsKICAgICAgICAg ICAgICBqcFByaXZpbGVnZXMucmVzZXQoKTsKICAgICAgICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IG9ialByaXYubGVuZ3RoOyBpKyspIAohICAgICAg ICAgICAgICAgICBpZiAob2JqUHJpdltpXVswXS5lcXVhbHMoIlBVQkxJQyIp KQogICAgICAgICAgICAgICAgICAgICAganBQcml2aWxlZ2VzLnNldFNlbGVj dGVkQm94KG9ialByaXZbaV1bMV0sIHRydWUpOwogICAgICAgICAgICAgIGpi QXBwbHkuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAgIC8vIFBVQkxJQyBhbmQgbGlzdCBzZWxlY3Rpb24KICAg ICAgICAgICAgICBqcFByaXZpbGVnZXMuc2V0RW5hYmxlZCh0cnVlKTsKICAg ICAgICAgICAgICBqcFByaXZpbGVnZXMucmVzZXQoKTsKICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgcHJpdmF0 ZSBBZG1pbkJhY2tlbmRDbGllbnQgYmFja2VuZENsaWVudDsKLS0tIDU4OSw2 MDYgLS0tLQogICAgICAgICAgICAgIFN0cmluZ1tdW10gb2JqUHJpdiA9IGdl dFByaXZpbGVnZXMoKTsKICAgICAgICAgICAgICBqcFByaXZpbGVnZXMucmVz ZXQoKTsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9ialBy aXYubGVuZ3RoOyBpKyspIAohICAgICAgICAgICAgICAgICBpZiAob2JqUHJp dltpXVswXS5lcXVhbHMoIlBVQkxJQyIpKSB7CiAgICAgICAgICAgICAgICAg ICAgICBqcFByaXZpbGVnZXMuc2V0U2VsZWN0ZWRCb3gob2JqUHJpdltpXVsx XSwgdHJ1ZSk7CisgCisgCQkJCQlpZiAob2JqUHJpdltpXVszXS5lcXVhbHMo IllFUyIpKQorIAkJCQkJCWpwUHJpdmlsZWdlcy5zZXRTZWxlY3RlZFNlY29u ZGFyeUJveChvYmpQcml2W2ldWzFdLCB0cnVlKTsKKyAJCQkJfQogICAgICAg ICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgIC8vIFBVQkxJQyBhbmQgbGlzdCBzZWxl Y3Rpb24KICAgICAgICAgICAgICBqcFByaXZpbGVnZXMuc2V0RW5hYmxlZCh0 cnVlKTsKICAgICAgICAgICAgICBqcFByaXZpbGVnZXMucmVzZXQoKTsKICAg ICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcHJpdmF0ZSBBZG1pbkJh Y2tlbmRDbGllbnQgYmFja2VuZENsaWVudDsKKioqKioqKioqKioqKioqCioq KiA1MzMsNTM5ICoqKioKICAgICAgcHJpdmF0ZSBHZW5lcmljQWN0aW9uIGFw cGx5QWN0aW9uOwogICAgICBwcml2YXRlIEdlbmVyaWNBY3Rpb24gY2FuY2Vs QWN0aW9uOwogICAgICBwcml2YXRlIFN0cmluZ1tdIHByaXZpbGVnZXMgPSBu ZXcgU3RyaW5nWzBdOwohICAgICAKICAgICAgLy8gVmFyaWFibGVzIGRlY2xh cmF0aW9uIC0gZG8gbm90IG1vZGlmeS8vR0VOLUJFR0lOOnZhcmlhYmxlcwog ICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gamJBcHBseTsKICAg ICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KQnV0dG9uIGpiQ2FuY2VsOwotLS0g NjA5LDYxNiAtLS0tCiAgICAgIHByaXZhdGUgR2VuZXJpY0FjdGlvbiBhcHBs eUFjdGlvbjsKICAgICAgcHJpdmF0ZSBHZW5lcmljQWN0aW9uIGNhbmNlbEFj dGlvbjsKICAgICAgcHJpdmF0ZSBTdHJpbmdbXSBwcml2aWxlZ2VzID0gbmV3 IFN0cmluZ1swXTsKISAJcHJpdmF0ZSBTdHJpbmcgZ3JhbnRPcHRpb25TdHJp bmcgPSAiIjsKISAKICAgICAgLy8gVmFyaWFibGVzIGRlY2xhcmF0aW9uIC0g ZG8gbm90IG1vZGlmeS8vR0VOLUJFR0lOOnZhcmlhYmxlcwogICAgICBwcml2 YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gamJBcHBseTsKICAgICAgcHJpdmF0 ZSBqYXZheC5zd2luZy5KQnV0dG9uIGpiQ2FuY2VsOwoqKioqKioqKioqKioq KioKKioqIDU0NSw1NTEgKioqKgogICAgICBwcml2YXRlIGphdmF4LnN3aW5n LkpMYWJlbCBqbGJVc2VyczsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5K UGFuZWwganBCdXR0b25zOwogICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpQ YW5lbCBqcE9wdGlvbnM7CiEgICAgIHByaXZhdGUgY29tLnJlZGhhdC5yaGRi LmFkbWluLkNoZWNrQm94UGFuZWwganBQcml2aWxlZ2VzOwogICAgICBwcml2 YXRlIGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lIGpzcEdyb3VwczsKICAgICAg cHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBqc3BVc2VyczsKICAg ICAgLy8gRW5kIG9mIHZhcmlhYmxlcyBkZWNsYXJhdGlvbi8vR0VOLUVORDp2 YXJpYWJsZXMKLS0tIDYyMiw2MjggLS0tLQogICAgICBwcml2YXRlIGphdmF4 LnN3aW5nLkpMYWJlbCBqbGJVc2VyczsKICAgICAgcHJpdmF0ZSBqYXZheC5z d2luZy5KUGFuZWwganBCdXR0b25zOwogICAgICBwcml2YXRlIGphdmF4LnN3 aW5nLkpQYW5lbCBqcE9wdGlvbnM7CiEgICAgIHByaXZhdGUgY29tLnJlZGhh dC5yaGRiLmFkbWluLlByaXZpbGVnZXNDaGVja0JveFBhbmVsIGpwUHJpdmls ZWdlczsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBq c3BHcm91cHM7CiAgICAgIHByaXZhdGUgamF2YXguc3dpbmcuSlNjcm9sbFBh bmUganNwVXNlcnM7CiAgICAgIC8vIEVuZCBvZiB2YXJpYWJsZXMgZGVjbGFy YXRpb24vL0dFTi1FTkQ6dmFyaWFibGVzCkluZGV4OiBzcmMvY29tL3JlZGhh dC9yaGRiL2FkbWluL01hbmFnZVByaXZpbGVnZXNEaWFsb2cuZm9ybQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3JjL3Jo ZGIvZ3VpdG9vbHMvcmhkYi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRiL2Fk bWluL01hbmFnZVByaXZpbGVnZXNEaWFsb2cuZm9ybSx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xCmRpZmYgLWMgLXIxLjEgTWFuYWdlUHJpdmlsZWdlc0Rp YWxvZy5mb3JtCioqKiBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL01hbmFn ZVByaXZpbGVnZXNEaWFsb2cuZm9ybQkxNCBKYW4gMjAwNCAwMDo1Mzo1MCAt MDAwMAkxLjEKLS0tIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vTWFuYWdl UHJpdmlsZWdlc0RpYWxvZy5mb3JtCTkgSnVuIDIwMDQgMDU6Mzk6MjIgLTAw MDAKKioqKioqKioqKioqKioqCioqKiA0OCw2MCAqKioqCiAgICAgICAgICAg ICAgPC9Db25zdHJhaW50PgogICAgICAgICAgICA8L0NvbnN0cmFpbnRzPgog ICAgICAgICAgPC9Db21wb25lbnQ+CiEgICAgICAgICA8Q29udGFpbmVyIGNs YXNzPSJjb20ucmVkaGF0LnJoZGIuYWRtaW4uQ2hlY2tCb3hQYW5lbCIgbmFt ZT0ianBEYXRhYmFzZVByaXYiPgogICAgICAgICAgICA8RXZlbnRzPgogICAg ICAgICAgICAgIDxFdmVudEhhbmRsZXIgZXZlbnQ9InByb3BlcnR5Q2hhbmdl IiBsaXN0ZW5lcj0iamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVy IiBwYXJhbWV0ZXJzPSJqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQi IGhhbmRsZXI9ImRhdGFiYXNlUHJpdmlsZWdlQ2hhbmdlIi8+CiAgICAgICAg ICAgIDwvRXZlbnRzPgogICAgICAgICAgICA8QXV4VmFsdWVzPgogICAgICAg ICAgICAgIDxBdXhWYWx1ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRvcl9Jbml0 Q29kZVBvc3QiIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJqcERh dGFiYXNlUHJpdi5zZXRFbmFibGVkKGZhbHNlKTsiLz4KISAgICAgICAgICAg ICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfQ3JlYXRlQ29k ZUN1c3RvbSIgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWU9Im5ldyBD aGVja0JveFBhbmVsKGRiT3B0aW9ucywgQ2hlY2tCb3hQYW5lbC5WRVJUSUNB TCk7Ii8+CiAgICAgICAgICAgIDwvQXV4VmFsdWVzPgogICAgICAgICAgICA8 Q29uc3RyYWludHM+CiAgICAgICAgICAgICAgPENvbnN0cmFpbnQgbGF5b3V0 Q2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlv dXRzLkRlc2lnbkJvcmRlckxheW91dCIgdmFsdWU9Im9yZy5uZXRiZWFucy5t b2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLkRlc2lnbkJvcmRlckxheW91 dCRCb3JkZXJDb25zdHJhaW50c0Rlc2NyaXB0aW9uIj4KLS0tIDQ4LDYwIC0t LS0KICAgICAgICAgICAgICA8L0NvbnN0cmFpbnQ+CiAgICAgICAgICAgIDwv Q29uc3RyYWludHM+CiAgICAgICAgICA8L0NvbXBvbmVudD4KISAgICAgICAg IDxDb250YWluZXIgY2xhc3M9ImNvbS5yZWRoYXQucmhkYi5hZG1pbi5Qcml2 aWxlZ2VzQ2hlY2tCb3hQYW5lbCIgbmFtZT0ianBEYXRhYmFzZVByaXYiPgog ICAgICAgICAgICA8RXZlbnRzPgogICAgICAgICAgICAgIDxFdmVudEhhbmRs ZXIgZXZlbnQ9InByb3BlcnR5Q2hhbmdlIiBsaXN0ZW5lcj0iamF2YS5iZWFu cy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIiBwYXJhbWV0ZXJzPSJqYXZhLmJl YW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQiIGhhbmRsZXI9ImRhdGFiYXNlUHJp dmlsZWdlQ2hhbmdlIi8+CiAgICAgICAgICAgIDwvRXZlbnRzPgogICAgICAg ICAgICA8QXV4VmFsdWVzPgogICAgICAgICAgICAgIDxBdXhWYWx1ZSBuYW1l PSJKYXZhQ29kZUdlbmVyYXRvcl9Jbml0Q29kZVBvc3QiIHR5cGU9ImphdmEu bGFuZy5TdHJpbmciIHZhbHVlPSJqcERhdGFiYXNlUHJpdi5zZXRFbmFibGVk KGZhbHNlKTsiLz4KISAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2 YUNvZGVHZW5lcmF0b3JfQ3JlYXRlQ29kZUN1c3RvbSIgdHlwZT0iamF2YS5s YW5nLlN0cmluZyIgdmFsdWU9Im5ldyBQcml2aWxlZ2VzQ2hlY2tCb3hQYW5l bChkYk9wdGlvbnMsICZxdW90OyZxdW90OywgZ3JhbnRPcHRpb25TdHJpbmcp OyIvPgogICAgICAgICAgICA8L0F1eFZhbHVlcz4KICAgICAgICAgICAgPENv bnN0cmFpbnRzPgogICAgICAgICAgICAgIDxDb25zdHJhaW50IGxheW91dENs YXNzPSJvcmcubmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0 cy5EZXNpZ25Cb3JkZXJMYXlvdXQiIHZhbHVlPSJvcmcubmV0YmVhbnMubW9k dWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5EZXNpZ25Cb3JkZXJMYXlvdXQk Qm9yZGVyQ29uc3RyYWludHNEZXNjcmlwdGlvbiI+CioqKioqKioqKioqKioq KgoqKiogOTcsMTA5ICoqKioKICAgICAgICAgICAgICA8L0NvbnN0cmFpbnQ+ CiAgICAgICAgICAgIDwvQ29uc3RyYWludHM+CiAgICAgICAgICA8L0NvbXBv bmVudD4KISAgICAgICAgIDxDb250YWluZXIgY2xhc3M9ImNvbS5yZWRoYXQu cmhkYi5hZG1pbi5DaGVja0JveFBhbmVsIiBuYW1lPSJqcFNjaGVtYVByaXYi PgogICAgICAgICAgICA8RXZlbnRzPgogICAgICAgICAgICAgIDxFdmVudEhh bmRsZXIgZXZlbnQ9InByb3BlcnR5Q2hhbmdlIiBsaXN0ZW5lcj0iamF2YS5i ZWFucy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIiBwYXJhbWV0ZXJzPSJqYXZh LmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQiIGhhbmRsZXI9InNjaGVtYVBy aXZpbGVnZUNoYW5nZSIvPgogICAgICAgICAgICA8L0V2ZW50cz4KICAgICAg ICAgICAgPEF1eFZhbHVlcz4KICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFt ZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZh LmxhbmcuU3RyaW5nIiB2YWx1ZT0ianBTY2hlbWFQcml2LnNldEVuYWJsZWQo ZmFsc2UpOyIvPgohICAgICAgICAgICAgIDxBdXhWYWx1ZSBuYW1lPSJKYXZh Q29kZUdlbmVyYXRvcl9DcmVhdGVDb2RlQ3VzdG9tIiB0eXBlPSJqYXZhLmxh bmcuU3RyaW5nIiB2YWx1ZT0ibmV3IENoZWNrQm94UGFuZWwoc2NoT3B0aW9u cywgQ2hlY2tCb3hQYW5lbC5WRVJUSUNBTCk7Ii8+CiAgICAgICAgICAgIDwv QXV4VmFsdWVzPgogICAgICAgICAgICA8Q29uc3RyYWludHM+CiAgICAgICAg ICAgICAgPENvbnN0cmFpbnQgbGF5b3V0Q2xhc3M9Im9yZy5uZXRiZWFucy5t b2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLkRlc2lnbkJvcmRlckxheW91 dCIgdmFsdWU9Im9yZy5uZXRiZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5s YXlvdXRzLkRlc2lnbkJvcmRlckxheW91dCRCb3JkZXJDb25zdHJhaW50c0Rl c2NyaXB0aW9uIj4KLS0tIDk3LDEwOSAtLS0tCiAgICAgICAgICAgICAgPC9D b25zdHJhaW50PgogICAgICAgICAgICA8L0NvbnN0cmFpbnRzPgogICAgICAg ICAgPC9Db21wb25lbnQ+CiEgICAgICAgICA8Q29udGFpbmVyIGNsYXNzPSJj b20ucmVkaGF0LnJoZGIuYWRtaW4uUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwi IG5hbWU9ImpwU2NoZW1hUHJpdiI+CiAgICAgICAgICAgIDxFdmVudHM+CiAg ICAgICAgICAgICAgPEV2ZW50SGFuZGxlciBldmVudD0icHJvcGVydHlDaGFu Z2UiIGxpc3RlbmVyPSJqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVu ZXIiIHBhcmFtZXRlcnM9ImphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVu dCIgaGFuZGxlcj0ic2NoZW1hUHJpdmlsZWdlQ2hhbmdlIi8+CiAgICAgICAg ICAgIDwvRXZlbnRzPgogICAgICAgICAgICA8QXV4VmFsdWVzPgogICAgICAg ICAgICAgIDxBdXhWYWx1ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRvcl9Jbml0 Q29kZVBvc3QiIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJqcFNj aGVtYVByaXYuc2V0RW5hYmxlZChmYWxzZSk7Ii8+CiEgICAgICAgICAgICAg PEF1eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0NyZWF0ZUNvZGVD dXN0b20iIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJuZXcgUHJp dmlsZWdlc0NoZWNrQm94UGFuZWwoc2NoT3B0aW9ucywgJnF1b3Q7JnF1b3Q7 LCBncmFudE9wdGlvblN0cmluZyk7Ii8+CiAgICAgICAgICAgIDwvQXV4VmFs dWVzPgogICAgICAgICAgICA8Q29uc3RyYWludHM+CiAgICAgICAgICAgICAg PENvbnN0cmFpbnQgbGF5b3V0Q2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1bGVz LmZvcm0uY29tcGF0Mi5sYXlvdXRzLkRlc2lnbkJvcmRlckxheW91dCIgdmFs dWU9Im9yZy5uZXRiZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRz LkRlc2lnbkJvcmRlckxheW91dCRCb3JkZXJDb25zdHJhaW50c0Rlc2NyaXB0 aW9uIj4KKioqKioqKioqKioqKioqCioqKiAxNjYsMTc4ICoqKioKICAgICAg ICAgICAgICAgICAgPC9Db21wb25lbnQ+CiAgICAgICAgICAgICAgICA8L1N1 YkNvbXBvbmVudHM+CiAgICAgICAgICAgICAgPC9Db250YWluZXI+CiEgICAg ICAgICAgICAgPENvbnRhaW5lciBjbGFzcz0iY29tLnJlZGhhdC5yaGRiLmFk bWluLkNoZWNrQm94UGFuZWwiIG5hbWU9ImpwVGFibGVQcml2Ij4KICAgICAg ICAgICAgICAgIDxFdmVudHM+CiAgICAgICAgICAgICAgICAgIDxFdmVudEhh bmRsZXIgZXZlbnQ9InByb3BlcnR5Q2hhbmdlIiBsaXN0ZW5lcj0iamF2YS5i ZWFucy5Qcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIiBwYXJhbWV0ZXJzPSJqYXZh LmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQiIGhhbmRsZXI9InRhYmxlUHJp dmlsZWdlQ2hhbmdlIi8+CiAgICAgICAgICAgICAgICA8L0V2ZW50cz4KICAg ICAgICAgICAgICAgIDxBdXhWYWx1ZXM+CiAgICAgICAgICAgICAgICAgIDxB dXhWYWx1ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRvcl9Jbml0Q29kZVBvc3Qi IHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJqcFRhYmxlUHJpdi5z ZXRFbmFibGVkKGZhbHNlKTsiLz4KISAgICAgICAgICAgICAgICAgPEF1eFZh bHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0NyZWF0ZUNvZGVDdXN0b20i IHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJuZXcgQ2hlY2tCb3hQ YW5lbChvcHRpb25zLCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMLCBBZG1pblJl c291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9Q UklWSUxFR0VTX1BSSVZJTEVHRVMpKTsiLz4KICAgICAgICAgICAgICAgIDwv QXV4VmFsdWVzPgogICAgICAgICAgICAgICAgPENvbnN0cmFpbnRzPgogICAg ICAgICAgICAgICAgICA8Q29uc3RyYWludCBsYXlvdXRDbGFzcz0ib3JnLm5l dGJlYW5zLm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5K U3BsaXRQYW5lU3VwcG9ydExheW91dCIgdmFsdWU9Im9yZy5uZXRiZWFucy5t b2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNwbGl0UGFu ZVN1cHBvcnRMYXlvdXQkSlNwbGl0UGFuZUNvbnN0cmFpbnRzRGVzY3JpcHRp b24iPgotLS0gMTY2LDE3OCAtLS0tCiAgICAgICAgICAgICAgICAgIDwvQ29t cG9uZW50PgogICAgICAgICAgICAgICAgPC9TdWJDb21wb25lbnRzPgogICAg ICAgICAgICAgIDwvQ29udGFpbmVyPgohICAgICAgICAgICAgIDxDb250YWlu ZXIgY2xhc3M9ImNvbS5yZWRoYXQucmhkYi5hZG1pbi5Qcml2aWxlZ2VzQ2hl Y2tCb3hQYW5lbCIgbmFtZT0ianBUYWJsZVByaXYiPgogICAgICAgICAgICAg ICAgPEV2ZW50cz4KICAgICAgICAgICAgICAgICAgPEV2ZW50SGFuZGxlciBl dmVudD0icHJvcGVydHlDaGFuZ2UiIGxpc3RlbmVyPSJqYXZhLmJlYW5zLlBy b3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHBhcmFtZXRlcnM9ImphdmEuYmVhbnMu UHJvcGVydHlDaGFuZ2VFdmVudCIgaGFuZGxlcj0idGFibGVQcml2aWxlZ2VD aGFuZ2UiLz4KICAgICAgICAgICAgICAgIDwvRXZlbnRzPgogICAgICAgICAg ICAgICAgPEF1eFZhbHVlcz4KICAgICAgICAgICAgICAgICAgPEF1eFZhbHVl IG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0luaXRDb2RlUG9zdCIgdHlwZT0i amF2YS5sYW5nLlN0cmluZyIgdmFsdWU9ImpwVGFibGVQcml2LnNldEVuYWJs ZWQoZmFsc2UpOyIvPgohICAgICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFt ZT0iSmF2YUNvZGVHZW5lcmF0b3JfQ3JlYXRlQ29kZUN1c3RvbSIgdHlwZT0i amF2YS5sYW5nLlN0cmluZyIgdmFsdWU9Im5ldyBQcml2aWxlZ2VzQ2hlY2tC b3hQYW5lbChvcHRpb25zLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRt aW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX1BSSVZJTEVHRVMp LCBncmFudE9wdGlvblN0cmluZyk7Ii8+CiAgICAgICAgICAgICAgICA8L0F1 eFZhbHVlcz4KICAgICAgICAgICAgICAgIDxDb25zdHJhaW50cz4KICAgICAg ICAgICAgICAgICAgPENvbnN0cmFpbnQgbGF5b3V0Q2xhc3M9Im9yZy5uZXRi ZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNw bGl0UGFuZVN1cHBvcnRMYXlvdXQiIHZhbHVlPSJvcmcubmV0YmVhbnMubW9k dWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5zdXBwb3J0LkpTcGxpdFBhbmVT dXBwb3J0TGF5b3V0JEpTcGxpdFBhbmVDb25zdHJhaW50c0Rlc2NyaXB0aW9u Ij4KKioqKioqKioqKioqKioqCioqKiAyMjYsMjM4ICoqKioKICAgICAgICAg ICAgICAgICAgPC9Db21wb25lbnQ+CiAgICAgICAgICAgICAgICA8L1N1YkNv bXBvbmVudHM+CiAgICAgICAgICAgICAgPC9Db250YWluZXI+CiEgICAgICAg ICAgICAgPENvbnRhaW5lciBjbGFzcz0iY29tLnJlZGhhdC5yaGRiLmFkbWlu LkNoZWNrQm94UGFuZWwiIG5hbWU9ImpwVmlld1ByaXYiPgogICAgICAgICAg ICAgICAgPEV2ZW50cz4KICAgICAgICAgICAgICAgICAgPEV2ZW50SGFuZGxl ciBldmVudD0icHJvcGVydHlDaGFuZ2UiIGxpc3RlbmVyPSJqYXZhLmJlYW5z LlByb3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHBhcmFtZXRlcnM9ImphdmEuYmVh bnMuUHJvcGVydHlDaGFuZ2VFdmVudCIgaGFuZGxlcj0idmlld1ByaXZpbGVn ZUNoYW5nZSIvPgogICAgICAgICAgICAgICAgPC9FdmVudHM+CiAgICAgICAg ICAgICAgICA8QXV4VmFsdWVzPgogICAgICAgICAgICAgICAgICA8QXV4VmFs dWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBl PSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ianBWaWV3UHJpdi5zZXRFbmFi bGVkKGZhbHNlKTsiLz4KISAgICAgICAgICAgICAgICAgPEF1eFZhbHVlIG5h bWU9IkphdmFDb2RlR2VuZXJhdG9yX0NyZWF0ZUNvZGVDdXN0b20iIHR5cGU9 ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJuZXcgQ2hlY2tCb3hQYW5lbChv cHRpb25zLCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMLCBBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX1BSSVZJTEVHRVMpKTsiLz4KICAgICAgICAgICAgICAgIDwvQXV4VmFs dWVzPgogICAgICAgICAgICAgICAgPENvbnN0cmFpbnRzPgogICAgICAgICAg ICAgICAgICA8Q29uc3RyYWludCBsYXlvdXRDbGFzcz0ib3JnLm5ldGJlYW5z Lm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5KU3BsaXRQ YW5lU3VwcG9ydExheW91dCIgdmFsdWU9Im9yZy5uZXRiZWFucy5tb2R1bGVz LmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNwbGl0UGFuZVN1cHBv cnRMYXlvdXQkSlNwbGl0UGFuZUNvbnN0cmFpbnRzRGVzY3JpcHRpb24iPgot LS0gMjI2LDIzOCAtLS0tCiAgICAgICAgICAgICAgICAgIDwvQ29tcG9uZW50 PgogICAgICAgICAgICAgICAgPC9TdWJDb21wb25lbnRzPgogICAgICAgICAg ICAgIDwvQ29udGFpbmVyPgohICAgICAgICAgICAgIDxDb250YWluZXIgY2xh c3M9ImNvbS5yZWRoYXQucmhkYi5hZG1pbi5Qcml2aWxlZ2VzQ2hlY2tCb3hQ YW5lbCIgbmFtZT0ianBWaWV3UHJpdiI+CiAgICAgICAgICAgICAgICA8RXZl bnRzPgogICAgICAgICAgICAgICAgICA8RXZlbnRIYW5kbGVyIGV2ZW50PSJw cm9wZXJ0eUNoYW5nZSIgbGlzdGVuZXI9ImphdmEuYmVhbnMuUHJvcGVydHlD aGFuZ2VMaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2YS5iZWFucy5Qcm9wZXJ0 eUNoYW5nZUV2ZW50IiBoYW5kbGVyPSJ2aWV3UHJpdmlsZWdlQ2hhbmdlIi8+ CiAgICAgICAgICAgICAgICA8L0V2ZW50cz4KICAgICAgICAgICAgICAgIDxB dXhWYWx1ZXM+CiAgICAgICAgICAgICAgICAgIDxBdXhWYWx1ZSBuYW1lPSJK YXZhQ29kZUdlbmVyYXRvcl9Jbml0Q29kZVBvc3QiIHR5cGU9ImphdmEubGFu Zy5TdHJpbmciIHZhbHVlPSJqcFZpZXdQcml2LnNldEVuYWJsZWQoZmFsc2Up OyIvPgohICAgICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNv ZGVHZW5lcmF0b3JfQ3JlYXRlQ29kZUN1c3RvbSIgdHlwZT0iamF2YS5sYW5n LlN0cmluZyIgdmFsdWU9Im5ldyBQcml2aWxlZ2VzQ2hlY2tCb3hQYW5lbChv cHRpb25zLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJj ZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX1BSSVZJTEVHRVMpLCBncmFudE9w dGlvblN0cmluZyk7Ii8+CiAgICAgICAgICAgICAgICA8L0F1eFZhbHVlcz4K ICAgICAgICAgICAgICAgIDxDb25zdHJhaW50cz4KICAgICAgICAgICAgICAg ICAgPENvbnN0cmFpbnQgbGF5b3V0Q2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1 bGVzLmZvcm0uY29tcGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNwbGl0UGFuZVN1 cHBvcnRMYXlvdXQiIHZhbHVlPSJvcmcubmV0YmVhbnMubW9kdWxlcy5mb3Jt LmNvbXBhdDIubGF5b3V0cy5zdXBwb3J0LkpTcGxpdFBhbmVTdXBwb3J0TGF5 b3V0JEpTcGxpdFBhbmVDb25zdHJhaW50c0Rlc2NyaXB0aW9uIj4KKioqKioq KioqKioqKioqCioqKiAyODYsMjk4ICoqKioKICAgICAgICAgICAgICAgICAg PC9Db21wb25lbnQ+CiAgICAgICAgICAgICAgICA8L1N1YkNvbXBvbmVudHM+ CiAgICAgICAgICAgICAgPC9Db250YWluZXI+CiEgICAgICAgICAgICAgPENv bnRhaW5lciBjbGFzcz0iY29tLnJlZGhhdC5yaGRiLmFkbWluLkNoZWNrQm94 UGFuZWwiIG5hbWU9ImpwU2VxdWVuY2VzUHJpdiI+CiAgICAgICAgICAgICAg ICA8RXZlbnRzPgogICAgICAgICAgICAgICAgICA8RXZlbnRIYW5kbGVyIGV2 ZW50PSJwcm9wZXJ0eUNoYW5nZSIgbGlzdGVuZXI9ImphdmEuYmVhbnMuUHJv cGVydHlDaGFuZ2VMaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2YS5iZWFucy5Q cm9wZXJ0eUNoYW5nZUV2ZW50IiBoYW5kbGVyPSJzZXF1ZW5jZVByaXZpbGVn ZUNoYW5nZSIvPgogICAgICAgICAgICAgICAgPC9FdmVudHM+CiAgICAgICAg ICAgICAgICA8QXV4VmFsdWVzPgogICAgICAgICAgICAgICAgICA8QXV4VmFs dWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBl PSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ianBTZXF1ZW5jZXNQcml2LnNl dEVuYWJsZWQoZmFsc2UpOyIvPgohICAgICAgICAgICAgICAgICA8QXV4VmFs dWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfQ3JlYXRlQ29kZUN1c3RvbSIg dHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWU9Im5ldyBDaGVja0JveFBh bmVsKG9wdGlvbnMsIENoZWNrQm94UGFuZWwuVkVSVElDQUwsIEFkbWluUmVz b3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BS SVZJTEVHRVNfUFJJVklMRUdFUykpOyIvPgogICAgICAgICAgICAgICAgPC9B dXhWYWx1ZXM+CiAgICAgICAgICAgICAgICA8Q29uc3RyYWludHM+CiAgICAg ICAgICAgICAgICAgIDxDb25zdHJhaW50IGxheW91dENsYXNzPSJvcmcubmV0 YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5zdXBwb3J0LkpT cGxpdFBhbmVTdXBwb3J0TGF5b3V0IiB2YWx1ZT0ib3JnLm5ldGJlYW5zLm1v ZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5KU3BsaXRQYW5l U3VwcG9ydExheW91dCRKU3BsaXRQYW5lQ29uc3RyYWludHNEZXNjcmlwdGlv biI+Ci0tLSAyODYsMjk4IC0tLS0KICAgICAgICAgICAgICAgICAgPC9Db21w b25lbnQ+CiAgICAgICAgICAgICAgICA8L1N1YkNvbXBvbmVudHM+CiAgICAg ICAgICAgICAgPC9Db250YWluZXI+CiEgICAgICAgICAgICAgPENvbnRhaW5l ciBjbGFzcz0iY29tLnJlZGhhdC5yaGRiLmFkbWluLlByaXZpbGVnZXNDaGVj a0JveFBhbmVsIiBuYW1lPSJqcFNlcXVlbmNlc1ByaXYiPgogICAgICAgICAg ICAgICAgPEV2ZW50cz4KICAgICAgICAgICAgICAgICAgPEV2ZW50SGFuZGxl ciBldmVudD0icHJvcGVydHlDaGFuZ2UiIGxpc3RlbmVyPSJqYXZhLmJlYW5z LlByb3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHBhcmFtZXRlcnM9ImphdmEuYmVh bnMuUHJvcGVydHlDaGFuZ2VFdmVudCIgaGFuZGxlcj0ic2VxdWVuY2VQcml2 aWxlZ2VDaGFuZ2UiLz4KICAgICAgICAgICAgICAgIDwvRXZlbnRzPgogICAg ICAgICAgICAgICAgPEF1eFZhbHVlcz4KICAgICAgICAgICAgICAgICAgPEF1 eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0luaXRDb2RlUG9zdCIg dHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWU9ImpwU2VxdWVuY2VzUHJp di5zZXRFbmFibGVkKGZhbHNlKTsiLz4KISAgICAgICAgICAgICAgICAgPEF1 eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9yX0NyZWF0ZUNvZGVDdXN0 b20iIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZhbHVlPSJuZXcgUHJpdmls ZWdlc0NoZWNrQm94UGFuZWwob3B0aW9ucywgQWRtaW5SZXNvdXJjZXMuZ2V0 U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19Q UklWSUxFR0VTKSwgZ3JhbnRPcHRpb25TdHJpbmcpOyIvPgogICAgICAgICAg ICAgICAgPC9BdXhWYWx1ZXM+CiAgICAgICAgICAgICAgICA8Q29uc3RyYWlu dHM+CiAgICAgICAgICAgICAgICAgIDxDb25zdHJhaW50IGxheW91dENsYXNz PSJvcmcubmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5z dXBwb3J0LkpTcGxpdFBhbmVTdXBwb3J0TGF5b3V0IiB2YWx1ZT0ib3JnLm5l dGJlYW5zLm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5K U3BsaXRQYW5lU3VwcG9ydExheW91dCRKU3BsaXRQYW5lQ29uc3RyYWludHNE ZXNjcmlwdGlvbiI+CioqKioqKioqKioqKioqKgoqKiogMzQ2LDM1OCAqKioq CiAgICAgICAgICAgICAgICAgIDwvQ29tcG9uZW50PgogICAgICAgICAgICAg ICAgPC9TdWJDb21wb25lbnRzPgogICAgICAgICAgICAgIDwvQ29udGFpbmVy PgohICAgICAgICAgICAgIDxDb250YWluZXIgY2xhc3M9ImNvbS5yZWRoYXQu cmhkYi5hZG1pbi5DaGVja0JveFBhbmVsIiBuYW1lPSJqcExhbmd1YWdlc1By aXYiPgogICAgICAgICAgICAgICAgPEV2ZW50cz4KICAgICAgICAgICAgICAg ICAgPEV2ZW50SGFuZGxlciBldmVudD0icHJvcGVydHlDaGFuZ2UiIGxpc3Rl bmVyPSJqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXIiIHBhcmFt ZXRlcnM9ImphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVudCIgaGFuZGxl cj0ibGFuZ3VhZ2VQcml2aWxlZ2VDaGFuZ2UiLz4KICAgICAgICAgICAgICAg IDwvRXZlbnRzPgogICAgICAgICAgICAgICAgPEF1eFZhbHVlcz4KICAgICAg ICAgICAgICAgICAgPEF1eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9y X0luaXRDb2RlUG9zdCIgdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgdmFsdWU9 ImpwTGFuZ3VhZ2VzUHJpdi5zZXRFbmFibGVkKGZhbHNlKTsiLz4KISAgICAg ICAgICAgICAgICAgPEF1eFZhbHVlIG5hbWU9IkphdmFDb2RlR2VuZXJhdG9y X0NyZWF0ZUNvZGVDdXN0b20iIHR5cGU9ImphdmEubGFuZy5TdHJpbmciIHZh bHVlPSJuZXcgQ2hlY2tCb3hQYW5lbChsYW5nT3B0aW9ucywgQ2hlY2tCb3hQ YW5lbC5WRVJUSUNBTCwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWlu UmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19QUklWSUxFR0VTKSk7 Ii8+CiAgICAgICAgICAgICAgICA8L0F1eFZhbHVlcz4KICAgICAgICAgICAg ICAgIDxDb25zdHJhaW50cz4KICAgICAgICAgICAgICAgICAgPENvbnN0cmFp bnQgbGF5b3V0Q2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1bGVzLmZvcm0uY29t cGF0Mi5sYXlvdXRzLnN1cHBvcnQuSlNwbGl0UGFuZVN1cHBvcnRMYXlvdXQi IHZhbHVlPSJvcmcubmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5 b3V0cy5zdXBwb3J0LkpTcGxpdFBhbmVTdXBwb3J0TGF5b3V0JEpTcGxpdFBh bmVDb25zdHJhaW50c0Rlc2NyaXB0aW9uIj4KLS0tIDM0NiwzNTggLS0tLQog ICAgICAgICAgICAgICAgICA8L0NvbXBvbmVudD4KICAgICAgICAgICAgICAg IDwvU3ViQ29tcG9uZW50cz4KICAgICAgICAgICAgICA8L0NvbnRhaW5lcj4K ISAgICAgICAgICAgICA8Q29udGFpbmVyIGNsYXNzPSJjb20ucmVkaGF0LnJo ZGIuYWRtaW4uUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwiIG5hbWU9ImpwTGFu Z3VhZ2VzUHJpdiI+CiAgICAgICAgICAgICAgICA8RXZlbnRzPgogICAgICAg ICAgICAgICAgICA8RXZlbnRIYW5kbGVyIGV2ZW50PSJwcm9wZXJ0eUNoYW5n ZSIgbGlzdGVuZXI9ImphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VMaXN0ZW5l ciIgcGFyYW1ldGVycz0iamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50 IiBoYW5kbGVyPSJsYW5ndWFnZVByaXZpbGVnZUNoYW5nZSIvPgogICAgICAg ICAgICAgICAgPC9FdmVudHM+CiAgICAgICAgICAgICAgICA8QXV4VmFsdWVz PgogICAgICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVH ZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5n IiB2YWx1ZT0ianBMYW5ndWFnZXNQcml2LnNldEVuYWJsZWQoZmFsc2UpOyIv PgohICAgICAgICAgICAgICAgICA8QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVH ZW5lcmF0b3JfQ3JlYXRlQ29kZUN1c3RvbSIgdHlwZT0iamF2YS5sYW5nLlN0 cmluZyIgdmFsdWU9Im5ldyBQcml2aWxlZ2VzQ2hlY2tCb3hQYW5lbChsYW5n T3B0aW9ucywgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3Vy Y2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19QUklWSUxFR0VTKSwgZ3JhbnRP cHRpb25TdHJpbmcpOyIvPgogICAgICAgICAgICAgICAgPC9BdXhWYWx1ZXM+ CiAgICAgICAgICAgICAgICA8Q29uc3RyYWludHM+CiAgICAgICAgICAgICAg ICAgIDxDb25zdHJhaW50IGxheW91dENsYXNzPSJvcmcubmV0YmVhbnMubW9k dWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5zdXBwb3J0LkpTcGxpdFBhbmVT dXBwb3J0TGF5b3V0IiB2YWx1ZT0ib3JnLm5ldGJlYW5zLm1vZHVsZXMuZm9y bS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5KU3BsaXRQYW5lU3VwcG9ydExh eW91dCRKU3BsaXRQYW5lQ29uc3RyYWludHNEZXNjcmlwdGlvbiI+CioqKioq KioqKioqKioqKgoqKiogNDA2LDQxOCAqKioqCiAgICAgICAgICAgICAgICAg IDwvQ29tcG9uZW50PgogICAgICAgICAgICAgICAgPC9TdWJDb21wb25lbnRz PgogICAgICAgICAgICAgIDwvQ29udGFpbmVyPgohICAgICAgICAgICAgIDxD b250YWluZXIgY2xhc3M9ImNvbS5yZWRoYXQucmhkYi5hZG1pbi5DaGVja0Jv eFBhbmVsIiBuYW1lPSJqcEZ1bmN0aW9uUHJpdiI+CiAgICAgICAgICAgICAg ICA8RXZlbnRzPgogICAgICAgICAgICAgICAgICA8RXZlbnRIYW5kbGVyIGV2 ZW50PSJwcm9wZXJ0eUNoYW5nZSIgbGlzdGVuZXI9ImphdmEuYmVhbnMuUHJv cGVydHlDaGFuZ2VMaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2YS5iZWFucy5Q cm9wZXJ0eUNoYW5nZUV2ZW50IiBoYW5kbGVyPSJmdW5jdGlvblByaXZpbGVn ZUNoYW5nZSIvPgogICAgICAgICAgICAgICAgPC9FdmVudHM+CiAgICAgICAg ICAgICAgICA8QXV4VmFsdWVzPgogICAgICAgICAgICAgICAgICA8QXV4VmFs dWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0IiB0eXBl PSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ianBGdW5jdGlvblByaXYuc2V0 RW5hYmxlZChmYWxzZSk7Ii8+CiEgICAgICAgICAgICAgICAgIDxBdXhWYWx1 ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRvcl9DcmVhdGVDb2RlQ3VzdG9tIiB0 eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ibmV3IENoZWNrQm94UGFu ZWwoZnVuY09wdGlvbnMsIENoZWNrQm94UGFuZWwuVkVSVElDQUwsIEFkbWlu UmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdF X1BSSVZJTEVHRVNfUFJJVklMRUdFUykpOyIvPgogICAgICAgICAgICAgICAg PC9BdXhWYWx1ZXM+CiAgICAgICAgICAgICAgICA8Q29uc3RyYWludHM+CiAg ICAgICAgICAgICAgICAgIDxDb25zdHJhaW50IGxheW91dENsYXNzPSJvcmcu bmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5zdXBwb3J0 LkpTcGxpdFBhbmVTdXBwb3J0TGF5b3V0IiB2YWx1ZT0ib3JnLm5ldGJlYW5z Lm1vZHVsZXMuZm9ybS5jb21wYXQyLmxheW91dHMuc3VwcG9ydC5KU3BsaXRQ YW5lU3VwcG9ydExheW91dCRKU3BsaXRQYW5lQ29uc3RyYWludHNEZXNjcmlw dGlvbiI+Ci0tLSA0MDYsNDE4IC0tLS0KICAgICAgICAgICAgICAgICAgPC9D b21wb25lbnQ+CiAgICAgICAgICAgICAgICA8L1N1YkNvbXBvbmVudHM+CiAg ICAgICAgICAgICAgPC9Db250YWluZXI+CiEgICAgICAgICAgICAgPENvbnRh aW5lciBjbGFzcz0iY29tLnJlZGhhdC5yaGRiLmFkbWluLlByaXZpbGVnZXND aGVja0JveFBhbmVsIiBuYW1lPSJqcEZ1bmN0aW9uUHJpdiI+CiAgICAgICAg ICAgICAgICA8RXZlbnRzPgogICAgICAgICAgICAgICAgICA8RXZlbnRIYW5k bGVyIGV2ZW50PSJwcm9wZXJ0eUNoYW5nZSIgbGlzdGVuZXI9ImphdmEuYmVh bnMuUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciIgcGFyYW1ldGVycz0iamF2YS5i ZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IiBoYW5kbGVyPSJmdW5jdGlvblBy aXZpbGVnZUNoYW5nZSIvPgogICAgICAgICAgICAgICAgPC9FdmVudHM+CiAg ICAgICAgICAgICAgICA8QXV4VmFsdWVzPgogICAgICAgICAgICAgICAgICA8 QXV4VmFsdWUgbmFtZT0iSmF2YUNvZGVHZW5lcmF0b3JfSW5pdENvZGVQb3N0 IiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ianBGdW5jdGlvblBy aXYuc2V0RW5hYmxlZChmYWxzZSk7Ii8+CiEgICAgICAgICAgICAgICAgIDxB dXhWYWx1ZSBuYW1lPSJKYXZhQ29kZUdlbmVyYXRvcl9DcmVhdGVDb2RlQ3Vz dG9tIiB0eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiB2YWx1ZT0ibmV3IFByaXZp bGVnZXNDaGVja0JveFBhbmVsKGZ1bmNPcHRpb25zLCBBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX1BSSVZJTEVHRVMpLCBncmFudE9wdGlvblN0cmluZyk7Ii8+CiAgICAg ICAgICAgICAgICA8L0F1eFZhbHVlcz4KICAgICAgICAgICAgICAgIDxDb25z dHJhaW50cz4KICAgICAgICAgICAgICAgICAgPENvbnN0cmFpbnQgbGF5b3V0 Q2xhc3M9Im9yZy5uZXRiZWFucy5tb2R1bGVzLmZvcm0uY29tcGF0Mi5sYXlv dXRzLnN1cHBvcnQuSlNwbGl0UGFuZVN1cHBvcnRMYXlvdXQiIHZhbHVlPSJv cmcubmV0YmVhbnMubW9kdWxlcy5mb3JtLmNvbXBhdDIubGF5b3V0cy5zdXBw b3J0LkpTcGxpdFBhbmVTdXBwb3J0TGF5b3V0JEpTcGxpdFBhbmVDb25zdHJh aW50c0Rlc2NyaXB0aW9uIj4KSW5kZXg6IHNyYy9jb20vcmVkaGF0L3JoZGIv YWRtaW4vTWFuYWdlUHJpdmlsZWdlc0RpYWxvZy5qYXZhCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcmhkYi9zcmMvcmhkYi9ndWl0 b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vTWFu YWdlUHJpdmlsZWdlc0RpYWxvZy5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjEuMS4xCmRpZmYgLWMgLXIxLjEuMS4xIE1hbmFnZVByaXZpbGVnZXNE aWFsb2cuamF2YQoqKiogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9NYW5h Z2VQcml2aWxlZ2VzRGlhbG9nLmphdmEJMjEgTm92IDIwMDMgMTg6MzA6MjMg LTAwMDAJMS4xLjEuMQotLS0gc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9N YW5hZ2VQcml2aWxlZ2VzRGlhbG9nLmphdmEJOSBKdW4gMjAwNCAwNTozOToy MyAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDEsNSAqKioqCiAgLyoqCiEg ICogQ29weXJpZ2h0IChjKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkg cmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKLS0tIDEsNSAtLS0tCiAg LyoqCiEgICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFJlZCBIYXQsIElu Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1h eSBiZSBmcmVlbHkgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlCiAgICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKKioq KioqKioqKioqKioqCioqKiA3Miw3NyAqKioqCi0tLSA3Miw4MiAtLS0tCiAg CQljYW5jZWxBY3Rpb24gPSBhZi5nZXRBY3Rpb24oQWN0aW9uRmFjdG9yeS5B Q1RJT05fQ0FOQ0VMKTsKICAJCWFwcGx5QWN0aW9uID0gYWYuZ2V0QWN0aW9u KEFjdGlvbkZhY3RvcnkuQUNUSU9OX0FQUExZKTsKICAJCQorIAkJLy8gT25s eSBNQU5BR0UgVVNFUlMgc2hvdWxkIGhhdmUgV0lUSCBHUkFOVCBPUFRJT04g b3B0aW9uLi4KKyAJCQorIAkJaWYgKGludm9jYXRpb25Ob2RlIGluc3RhbmNl b2YgVXNlck5vZGUpCisgCQkJZ3JhbnRPcHRpb25TdHJpbmcgPSBkYm1kLmdl dEdyYW50T3B0aW9uU3RyaW5nKCk7CQorIAkJCiAgICAgICAgICBpbml0Q29t cG9uZW50cygpOwogIAkJCiAgICAgICAgICAgICAgICAgIC8vIEFkZCBkYXRh YmFzZXMgdG8gY29tYm8gYm94CioqKioqKioqKioqKioqKgoqKiogMTA3LDEz NyAqKioqCiAgCiAgICAgICAgICBqcERhdGFiYXNlID0gbmV3IGphdmF4LnN3 aW5nLkpQYW5lbCgpOwogICAgICAgICAgamNiRGF0YWJhc2UgPSBuZXcgY29t LnJlZGhhdC5yaGRiLmFkbWluLkFkbWluQ29tYm9Cb3goKTsKISAgICAgICAg IGpwRGF0YWJhc2VQcml2ID0gbmV3IENoZWNrQm94UGFuZWwoZGJPcHRpb25z LCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMKTsKICAgICAgICAgIGpwU2NoZW1h ID0gbmV3IGphdmF4LnN3aW5nLkpQYW5lbCgpOwogICAgICAgICAgamNiU2No ZW1hID0gbmV3IGNvbS5yZWRoYXQucmhkYi5hZG1pbi5BZG1pbkNvbWJvQm94 KCk7CiEgICAgICAgICBqcFNjaGVtYVByaXYgPSBuZXcgQ2hlY2tCb3hQYW5l bChzY2hPcHRpb25zLCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMKTsKICAgICAg ICAgIGp0cE9iamVjdHMgPSBuZXcgamF2YXguc3dpbmcuSlRhYmJlZFBhbmUo KTsKICAgICAgICAgIGpzcFRhYmxlcyA9IG5ldyBqYXZheC5zd2luZy5KU3Bs aXRQYW5lKCk7CiAgICAgICAgICBqc2NUYWJsZXMgPSBuZXcgamF2YXguc3dp bmcuSlNjcm9sbFBhbmUoKTsKICAgICAgICAgIGpsVGFibGVzID0gbmV3IGph dmF4LnN3aW5nLkpMaXN0KCk7CiEgICAgICAgICBqcFRhYmxlUHJpdiA9IG5l dyBDaGVja0JveFBhbmVsKG9wdGlvbnMsIENoZWNrQm94UGFuZWwuVkVSVElD QUwsIEFkbWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5E TEdfTUFOQUdFX1BSSVZJTEVHRVNfUFJJVklMRUdFUykpOwogICAgICAgICAg anNwVmlld3MgPSBuZXcgamF2YXguc3dpbmcuSlNwbGl0UGFuZSgpOwogICAg ICAgICAganNjVmlld3MgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUo KTsKICAgICAgICAgIGpsVmlld3MgPSBuZXcgamF2YXguc3dpbmcuSkxpc3Qo KTsKISAgICAgICAgIGpwVmlld1ByaXYgPSBuZXcgQ2hlY2tCb3hQYW5lbChv cHRpb25zLCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMLCBBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX1BSSVZJTEVHRVMpKTsKICAgICAgICAgIGpzcFNlcXVlbmNlcyA9IG5l dyBqYXZheC5zd2luZy5KU3BsaXRQYW5lKCk7CiAgICAgICAgICBqc2NTZXF1 ZW5jZXMgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUoKTsKICAgICAg ICAgIGpsU2VxdWVuY2VzID0gbmV3IGphdmF4LnN3aW5nLkpMaXN0KCk7CiEg ICAgICAgICBqcFNlcXVlbmNlc1ByaXYgPSBuZXcgQ2hlY2tCb3hQYW5lbChv cHRpb25zLCBDaGVja0JveFBhbmVsLlZFUlRJQ0FMLCBBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX1BSSVZJTEVHRVMpKTsKICAgICAgICAgIGpzcExhbmd1YWdlcyA9IG5l dyBqYXZheC5zd2luZy5KU3BsaXRQYW5lKCk7CiAgICAgICAgICBqc2NMYW5n dWFnZXMgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUoKTsKICAgICAg ICAgIGpsTGFuZ3VhZ2VzID0gbmV3IGphdmF4LnN3aW5nLkpMaXN0KCk7CiEg ICAgICAgICBqcExhbmd1YWdlc1ByaXYgPSBuZXcgQ2hlY2tCb3hQYW5lbChs YW5nT3B0aW9ucywgQ2hlY2tCb3hQYW5lbC5WRVJUSUNBTCwgQWRtaW5SZXNv dXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJ VklMRUdFU19QUklWSUxFR0VTKSk7CiAgICAgICAgICBqc3BGdW5jdGlvbnMg PSBuZXcgamF2YXguc3dpbmcuSlNwbGl0UGFuZSgpOwogICAgICAgICAganNj RnVuY3Rpb25zID0gbmV3IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lKCk7CiAg ICAgICAgICBqbEZ1bmN0aW9ucyA9IG5ldyBqYXZheC5zd2luZy5KTGlzdCgp OwohICAgICAgICAganBGdW5jdGlvblByaXYgPSBuZXcgQ2hlY2tCb3hQYW5l bChmdW5jT3B0aW9ucywgQ2hlY2tCb3hQYW5lbC5WRVJUSUNBTCwgQWRtaW5S ZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0Vf UFJJVklMRUdFU19QUklWSUxFR0VTKSk7CiAgICAgICAgICBqcEJ1dHRvbnMg PSBuZXcgamF2YXguc3dpbmcuSlBhbmVsKCk7CiAgICAgICAgICBqYk9LID0g b2tBY3Rpb24uZ2V0QnV0dG9uKCk7CiAgICAgICAgICBqYkFwcGx5ID0gYXBw bHlBY3Rpb24uZ2V0QnV0dG9uKCk7Ci0tLSAxMTIsMTQyIC0tLS0KICAKICAg ICAgICAgIGpwRGF0YWJhc2UgPSBuZXcgamF2YXguc3dpbmcuSlBhbmVsKCk7 CiAgICAgICAgICBqY2JEYXRhYmFzZSA9IG5ldyBjb20ucmVkaGF0LnJoZGIu YWRtaW4uQWRtaW5Db21ib0JveCgpOwohICAgICAgICAganBEYXRhYmFzZVBy aXYgPSBuZXcgUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwoZGJPcHRpb25zLCAi IiwgZ3JhbnRPcHRpb25TdHJpbmcpOwogICAgICAgICAganBTY2hlbWEgPSBu ZXcgamF2YXguc3dpbmcuSlBhbmVsKCk7CiAgICAgICAgICBqY2JTY2hlbWEg PSBuZXcgY29tLnJlZGhhdC5yaGRiLmFkbWluLkFkbWluQ29tYm9Cb3goKTsK ISAgICAgICAgIGpwU2NoZW1hUHJpdiA9IG5ldyBQcml2aWxlZ2VzQ2hlY2tC b3hQYW5lbChzY2hPcHRpb25zLCAiIiwgZ3JhbnRPcHRpb25TdHJpbmcpOwog ICAgICAgICAganRwT2JqZWN0cyA9IG5ldyBqYXZheC5zd2luZy5KVGFiYmVk UGFuZSgpOwogICAgICAgICAganNwVGFibGVzID0gbmV3IGphdmF4LnN3aW5n LkpTcGxpdFBhbmUoKTsKICAgICAgICAgIGpzY1RhYmxlcyA9IG5ldyBqYXZh eC5zd2luZy5KU2Nyb2xsUGFuZSgpOwogICAgICAgICAgamxUYWJsZXMgPSBu ZXcgamF2YXguc3dpbmcuSkxpc3QoKTsKISAgICAgICAgIGpwVGFibGVQcml2 ID0gbmV3IFByaXZpbGVnZXNDaGVja0JveFBhbmVsKG9wdGlvbnMsIEFkbWlu UmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdF X1BSSVZJTEVHRVNfUFJJVklMRUdFUyksIGdyYW50T3B0aW9uU3RyaW5nKTsK ICAgICAgICAgIGpzcFZpZXdzID0gbmV3IGphdmF4LnN3aW5nLkpTcGxpdFBh bmUoKTsKICAgICAgICAgIGpzY1ZpZXdzID0gbmV3IGphdmF4LnN3aW5nLkpT Y3JvbGxQYW5lKCk7CiAgICAgICAgICBqbFZpZXdzID0gbmV3IGphdmF4LnN3 aW5nLkpMaXN0KCk7CiEgICAgICAgICBqcFZpZXdQcml2ID0gbmV3IFByaXZp bGVnZXNDaGVja0JveFBhbmVsKG9wdGlvbnMsIEFkbWluUmVzb3VyY2VzLmdl dFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVHRVNf UFJJVklMRUdFUyksIGdyYW50T3B0aW9uU3RyaW5nKTsKICAgICAgICAgIGpz cFNlcXVlbmNlcyA9IG5ldyBqYXZheC5zd2luZy5KU3BsaXRQYW5lKCk7CiAg ICAgICAgICBqc2NTZXF1ZW5jZXMgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9s bFBhbmUoKTsKICAgICAgICAgIGpsU2VxdWVuY2VzID0gbmV3IGphdmF4LnN3 aW5nLkpMaXN0KCk7CiEgICAgICAgICBqcFNlcXVlbmNlc1ByaXYgPSBuZXcg UHJpdmlsZWdlc0NoZWNrQm94UGFuZWwob3B0aW9ucywgQWRtaW5SZXNvdXJj ZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklM RUdFU19QUklWSUxFR0VTKSwgZ3JhbnRPcHRpb25TdHJpbmcpOwogICAgICAg ICAganNwTGFuZ3VhZ2VzID0gbmV3IGphdmF4LnN3aW5nLkpTcGxpdFBhbmUo KTsKICAgICAgICAgIGpzY0xhbmd1YWdlcyA9IG5ldyBqYXZheC5zd2luZy5K U2Nyb2xsUGFuZSgpOwogICAgICAgICAgamxMYW5ndWFnZXMgPSBuZXcgamF2 YXguc3dpbmcuSkxpc3QoKTsKISAgICAgICAgIGpwTGFuZ3VhZ2VzUHJpdiA9 IG5ldyBQcml2aWxlZ2VzQ2hlY2tCb3hQYW5lbChsYW5nT3B0aW9ucywgQWRt aW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5B R0VfUFJJVklMRUdFU19QUklWSUxFR0VTKSwgZ3JhbnRPcHRpb25TdHJpbmcp OwogICAgICAgICAganNwRnVuY3Rpb25zID0gbmV3IGphdmF4LnN3aW5nLkpT cGxpdFBhbmUoKTsKICAgICAgICAgIGpzY0Z1bmN0aW9ucyA9IG5ldyBqYXZh eC5zd2luZy5KU2Nyb2xsUGFuZSgpOwogICAgICAgICAgamxGdW5jdGlvbnMg PSBuZXcgamF2YXguc3dpbmcuSkxpc3QoKTsKISAgICAgICAgIGpwRnVuY3Rp b25Qcml2ID0gbmV3IFByaXZpbGVnZXNDaGVja0JveFBhbmVsKGZ1bmNPcHRp b25zLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMu RExHX01BTkFHRV9QUklWSUxFR0VTX1BSSVZJTEVHRVMpLCBncmFudE9wdGlv blN0cmluZyk7CiAgICAgICAgICBqcEJ1dHRvbnMgPSBuZXcgamF2YXguc3dp bmcuSlBhbmVsKCk7CiAgICAgICAgICBqYk9LID0gb2tBY3Rpb24uZ2V0QnV0 dG9uKCk7CiAgICAgICAgICBqYkFwcGx5ID0gYXBwbHlBY3Rpb24uZ2V0QnV0 dG9uKCk7CioqKioqKioqKioqKioqKgoqKiogMzgwLDM4NyAqKioqCiAgCiAg ICAgIHByaXZhdGUgdm9pZCBsYW5ndWFnZVByaXZpbGVnZUNoYW5nZShqYXZh LmJlYW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6 ZXZlbnRfbGFuZ3VhZ2VQcml2aWxlZ2VDaGFuZ2UKICAgICAgICAgIC8vIEFk ZCB5b3VyIGhhbmRsaW5nIGNvZGUgaGVyZToKISAgICAgICAgIGlmIChldnQu Z2V0UHJvcGVydHlOYW1lKCkgPT0gQ2hlY2tCb3hQYW5lbC5TRUxFQ1RJT05f TUFERSkgewohICAgICAgICAgICAgIGlmIChqcExhbmd1YWdlc1ByaXYuZ2V0 Q2hhbmdlZEluZGV4ZXMoKS5sZW5ndGggIT0gMCB8fCBqbExhbmd1YWdlcy5n ZXRTZWxlY3RlZEluZGljZXMoKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAg ICAgICAgIGp0cE9iamVjdHMuc2V0VGl0bGVBdCgzLCBBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX0xBTkdVQUdFUykgKyAiICoiKTsKICAgICAgICAgICAgICAgICAgamJB cHBseS5zZXRFbmFibGVkKHRydWUpOwogICAgICAgICAgICAgICAgICBsYW5n UHJpdkNoYW5nZWQgPSB0cnVlOwotLS0gMzg1LDM5MiAtLS0tCiAgCiAgICAg IHByaXZhdGUgdm9pZCBsYW5ndWFnZVByaXZpbGVnZUNoYW5nZShqYXZhLmJl YW5zLlByb3BlcnR5Q2hhbmdlRXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6ZXZl bnRfbGFuZ3VhZ2VQcml2aWxlZ2VDaGFuZ2UKICAgICAgICAgIC8vIEFkZCB5 b3VyIGhhbmRsaW5nIGNvZGUgaGVyZToKISAgICAgICAgIGlmIChldnQuZ2V0 UHJvcGVydHlOYW1lKCkgPT0gUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwuU0VM RUNUSU9OX01BREUpIHsKISAgICAgICAgICAgICBpZiAoanBMYW5ndWFnZXNQ cml2LmdldENoYW5nZWRJbmRleGVzKCkubGVuZ3RoICE9IDAgfHwgamxMYW5n dWFnZXMuZ2V0U2VsZWN0ZWRJbmRpY2VzKCkubGVuZ3RoID4gMSkgewogICAg ICAgICAgICAgICAgICBqdHBPYmplY3RzLnNldFRpdGxlQXQoMywgQWRtaW5S ZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0Vf UFJJVklMRUdFU19MQU5HVUFHRVMpICsgIiAqIik7CiAgICAgICAgICAgICAg ICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKICAgICAgICAgICAgICAg ICAgbGFuZ1ByaXZDaGFuZ2VkID0gdHJ1ZTsKKioqKioqKioqKioqKioqCioq KiAzOTUsNDAyICoqKioKICAKICAgICAgcHJpdmF0ZSB2b2lkIGZ1bmN0aW9u UHJpdmlsZWdlQ2hhbmdlKGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VFdmVu dCBldnQpIHsvL0dFTi1GSVJTVDpldmVudF9mdW5jdGlvblByaXZpbGVnZUNo YW5nZQogICAgICAgICAgLy8gQWRkIHlvdXIgaGFuZGxpbmcgY29kZSBoZXJl OgohICAgICAgICAgaWYgKGV2dC5nZXRQcm9wZXJ0eU5hbWUoKSA9PSBDaGVj a0JveFBhbmVsLlNFTEVDVElPTl9NQURFKSB7CiEgICAgICAgICAgICAgaWYg KGpwRnVuY3Rpb25Qcml2LmdldENoYW5nZWRJbmRleGVzKCkubGVuZ3RoICE9 IDAgfHwgamxGdW5jdGlvbnMuZ2V0U2VsZWN0ZWRJbmRpY2VzKCkubGVuZ3Ro ID4gMCkgewogICAgICAgICAgICAgICAgICBqdHBPYmplY3RzLnNldFRpdGxl QXQoNCwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2Vz LkRMR19NQU5BR0VfUFJJVklMRUdFU19GVU5DVElPTlMpICsgIiAqIik7CiAg ICAgICAgICAgICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKICAg ICAgICAgICAgICAgICAgZnVuY1ByaXZDaGFuZ2VkID0gdHJ1ZTsKLS0tIDQw MCw0MDcgLS0tLQogIAogICAgICBwcml2YXRlIHZvaWQgZnVuY3Rpb25Qcml2 aWxlZ2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2 dCkgey8vR0VOLUZJUlNUOmV2ZW50X2Z1bmN0aW9uUHJpdmlsZWdlQ2hhbmdl CiAgICAgICAgICAvLyBBZGQgeW91ciBoYW5kbGluZyBjb2RlIGhlcmU6CiEg ICAgICAgICBpZiAoZXZ0LmdldFByb3BlcnR5TmFtZSgpID09IFByaXZpbGVn ZXNDaGVja0JveFBhbmVsLlNFTEVDVElPTl9NQURFKSB7CiEgICAgICAgICAg ICAgaWYgKGpwRnVuY3Rpb25Qcml2LmdldENoYW5nZWRJbmRleGVzKCkubGVu Z3RoICE9IDAgfHwgamxGdW5jdGlvbnMuZ2V0U2VsZWN0ZWRJbmRpY2VzKCku bGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgICBqdHBPYmplY3RzLnNl dFRpdGxlQXQoNCwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVz b3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19GVU5DVElPTlMpICsgIiAq Iik7CiAgICAgICAgICAgICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVl KTsKICAgICAgICAgICAgICAgICAgZnVuY1ByaXZDaGFuZ2VkID0gdHJ1ZTsK KioqKioqKioqKioqKioqCioqKiA0MTAsNDE3ICoqKioKICAKICAgICAgcHJp dmF0ZSB2b2lkIHNlcXVlbmNlUHJpdmlsZWdlQ2hhbmdlKGphdmEuYmVhbnMu UHJvcGVydHlDaGFuZ2VFdmVudCBldnQpIHsvL0dFTi1GSVJTVDpldmVudF9z ZXF1ZW5jZVByaXZpbGVnZUNoYW5nZQogICAgICAgICAgLy8gQWRkIHlvdXIg aGFuZGxpbmcgY29kZSBoZXJlOgohICAgICAgICAgaWYgKGV2dC5nZXRQcm9w ZXJ0eU5hbWUoKSA9PSBDaGVja0JveFBhbmVsLlNFTEVDVElPTl9NQURFKSB7 CiEgICAgICAgICAgICAgaWYgKGpwU2VxdWVuY2VzUHJpdi5nZXRDaGFuZ2Vk SW5kZXhlcygpLmxlbmd0aCAhPSAwIHx8IGpsU2VxdWVuY2VzLmdldFNlbGVj dGVkSW5kaWNlcygpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAg anRwT2JqZWN0cy5zZXRUaXRsZUF0KDIsIEFkbWluUmVzb3VyY2VzLmdldFN0 cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVHRVNfU0VR VUVOQ0VTKSArICIgKiIpOwogICAgICAgICAgICAgICAgICBqYkFwcGx5LnNl dEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgIHNlcVByaXZDaGFu Z2VkID0gdHJ1ZTsKLS0tIDQxNSw0MjIgLS0tLQogIAogICAgICBwcml2YXRl IHZvaWQgc2VxdWVuY2VQcml2aWxlZ2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9w ZXJ0eUNoYW5nZUV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X3NlcXVl bmNlUHJpdmlsZWdlQ2hhbmdlCiAgICAgICAgICAvLyBBZGQgeW91ciBoYW5k bGluZyBjb2RlIGhlcmU6CiEgICAgICAgICBpZiAoZXZ0LmdldFByb3BlcnR5 TmFtZSgpID09IFByaXZpbGVnZXNDaGVja0JveFBhbmVsLlNFTEVDVElPTl9N QURFKSB7CiEgICAgICAgICAgICAgaWYgKGpwU2VxdWVuY2VzUHJpdi5nZXRD aGFuZ2VkSW5kZXhlcygpLmxlbmd0aCAhPSAwIHx8IGpsU2VxdWVuY2VzLmdl dFNlbGVjdGVkSW5kaWNlcygpLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAg ICAgICAganRwT2JqZWN0cy5zZXRUaXRsZUF0KDIsIEFkbWluUmVzb3VyY2Vz LmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVH RVNfU0VRVUVOQ0VTKSArICIgKiIpOwogICAgICAgICAgICAgICAgICBqYkFw cGx5LnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgIHNlcVBy aXZDaGFuZ2VkID0gdHJ1ZTsKKioqKioqKioqKioqKioqCioqKiA0MjUsNDMy ICoqKioKICAKICAgICAgcHJpdmF0ZSB2b2lkIHZpZXdQcml2aWxlZ2VDaGFu Z2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2dCkgey8vR0VO LUZJUlNUOmV2ZW50X3ZpZXdQcml2aWxlZ2VDaGFuZ2UKICAgICAgICAgIC8v IEFkZCB5b3VyIGhhbmRsaW5nIGNvZGUgaGVyZToKISAgICAgICAgIGlmIChl dnQuZ2V0UHJvcGVydHlOYW1lKCkgPT0gQ2hlY2tCb3hQYW5lbC5TRUxFQ1RJ T05fTUFERSkgewohICAgICAgICAgICAgIGlmIChqcFZpZXdQcml2LmdldENo YW5nZWRJbmRleGVzKCkubGVuZ3RoICE9IDAgfHwgamxWaWV3cy5nZXRTZWxl Y3RlZEluZGljZXMoKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAg IGp0cE9iamVjdHMuc2V0VGl0bGVBdCgxLCBBZG1pblJlc291cmNlcy5nZXRT dHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX1ZJ RVdTKSArICIgKiIpOwogICAgICAgICAgICAgICAgICBqYkFwcGx5LnNldEVu YWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgIHZpZXdQcml2Q2hhbmdl ZCA9IHRydWU7Ci0tLSA0MzAsNDM3IC0tLS0KICAKICAgICAgcHJpdmF0ZSB2 b2lkIHZpZXdQcml2aWxlZ2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNo YW5nZUV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X3ZpZXdQcml2aWxl Z2VDaGFuZ2UKICAgICAgICAgIC8vIEFkZCB5b3VyIGhhbmRsaW5nIGNvZGUg aGVyZToKISAgICAgICAgIGlmIChldnQuZ2V0UHJvcGVydHlOYW1lKCkgPT0g UHJpdmlsZWdlc0NoZWNrQm94UGFuZWwuU0VMRUNUSU9OX01BREUpIHsKISAg ICAgICAgICAgICBpZiAoanBWaWV3UHJpdi5nZXRDaGFuZ2VkSW5kZXhlcygp Lmxlbmd0aCAhPSAwIHx8IGpsVmlld3MuZ2V0U2VsZWN0ZWRJbmRpY2VzKCku bGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgICBqdHBPYmplY3RzLnNl dFRpdGxlQXQoMSwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVz b3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19WSUVXUykgKyAiICoiKTsK ICAgICAgICAgICAgICAgICAgamJBcHBseS5zZXRFbmFibGVkKHRydWUpOwog ICAgICAgICAgICAgICAgICB2aWV3UHJpdkNoYW5nZWQgPSB0cnVlOwoqKioq KioqKioqKioqKioKKioqIDQ0MCw0NDcgKioqKgogIAogICAgICBwcml2YXRl IHZvaWQgdGFibGVQcml2aWxlZ2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0 eUNoYW5nZUV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X3RhYmxlUHJp dmlsZWdlQ2hhbmdlCiAgICAgICAgICAvLyBBZGQgeW91ciBoYW5kbGluZyBj b2RlIGhlcmU6CiEgICAgICAgICBpZiAoZXZ0LmdldFByb3BlcnR5TmFtZSgp ID09IENoZWNrQm94UGFuZWwuU0VMRUNUSU9OX01BREUpIHsKISAgICAgICAg ICAgICBpZiAoanBUYWJsZVByaXYuZ2V0Q2hhbmdlZEluZGV4ZXMoKS5sZW5n dGggIT0gMCB8fCBqbFRhYmxlcy5nZXRTZWxlY3RlZEluZGljZXMoKS5sZW5n dGggPiAwKSB7CiAgICAgICAgICAgICAgICAgIGp0cE9iamVjdHMuc2V0VGl0 bGVBdCgwLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJj ZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX1RBQkxFUykgKyAiICoiKTsKICAg ICAgICAgICAgICAgICAgamJBcHBseS5zZXRFbmFibGVkKHRydWUpOwogICAg ICAgICAgICAgICAgICB0YWJsZVByaXZDaGFuZ2VkID0gdHJ1ZTsKLS0tIDQ0 NSw0NTIgLS0tLQogIAogICAgICBwcml2YXRlIHZvaWQgdGFibGVQcml2aWxl Z2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2dCkg ey8vR0VOLUZJUlNUOmV2ZW50X3RhYmxlUHJpdmlsZWdlQ2hhbmdlCiAgICAg ICAgICAvLyBBZGQgeW91ciBoYW5kbGluZyBjb2RlIGhlcmU6CiEgICAgICAg ICBpZiAoZXZ0LmdldFByb3BlcnR5TmFtZSgpID09IFByaXZpbGVnZXNDaGVj a0JveFBhbmVsLlNFTEVDVElPTl9NQURFKSB7CiEgICAgICAgICAgICAgaWYg KGpwVGFibGVQcml2LmdldENoYW5nZWRJbmRleGVzKCkubGVuZ3RoICE9IDAg fHwgamxUYWJsZXMuZ2V0U2VsZWN0ZWRJbmRpY2VzKCkubGVuZ3RoID4gMSkg ewogICAgICAgICAgICAgICAgICBqdHBPYmplY3RzLnNldFRpdGxlQXQoMCwg QWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19N QU5BR0VfUFJJVklMRUdFU19UQUJMRVMpICsgIiAqIik7CiAgICAgICAgICAg ICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKICAgICAgICAgICAg ICAgICAgdGFibGVQcml2Q2hhbmdlZCA9IHRydWU7CioqKioqKioqKioqKioq KgoqKiogNDU1LDQ2MSAqKioqCiAgCiAgICAgIHByaXZhdGUgdm9pZCBzY2hl bWFQcml2aWxlZ2VDaGFuZ2UoamF2YS5iZWFucy5Qcm9wZXJ0eUNoYW5nZUV2 ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2ZW50X3NjaGVtYVByaXZpbGVnZUNo YW5nZQogICAgICAgICAgLy8gQWRkIHlvdXIgaGFuZGxpbmcgY29kZSBoZXJl OgohICAgICAgICAgaWYgKGV2dC5nZXRQcm9wZXJ0eU5hbWUoKSA9PSBDaGVj a0JveFBhbmVsLlNFTEVDVElPTl9NQURFKSB7CiAgICAgICAgICAgICAgaWYg KGpwU2NoZW1hUHJpdi5nZXRDaGFuZ2VkSW5kZXhlcygpLmxlbmd0aCAhPSAw KSB7CiAgICAgICAgICAgICAgICAgIGpwU2NoZW1hLnNldEJvcmRlcihuZXcg amF2YXguc3dpbmcuYm9yZGVyLlRpdGxlZEJvcmRlcihBZG1pblJlc291cmNl cy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxF R0VTX1NDSEVNQSkgKyAiICoiKSk7CiAgICAgICAgICAgICAgICAgIGpiQXBw bHkuc2V0RW5hYmxlZCh0cnVlKTsKLS0tIDQ2MCw0NjYgLS0tLQogIAogICAg ICBwcml2YXRlIHZvaWQgc2NoZW1hUHJpdmlsZWdlQ2hhbmdlKGphdmEuYmVh bnMuUHJvcGVydHlDaGFuZ2VFdmVudCBldnQpIHsvL0dFTi1GSVJTVDpldmVu dF9zY2hlbWFQcml2aWxlZ2VDaGFuZ2UKICAgICAgICAgIC8vIEFkZCB5b3Vy IGhhbmRsaW5nIGNvZGUgaGVyZToKISAgICAgICAgIGlmIChldnQuZ2V0UHJv cGVydHlOYW1lKCkgPT0gUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwuU0VMRUNU SU9OX01BREUpIHsKICAgICAgICAgICAgICBpZiAoanBTY2hlbWFQcml2Lmdl dENoYW5nZWRJbmRleGVzKCkubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAg ICAgICAganBTY2hlbWEuc2V0Qm9yZGVyKG5ldyBqYXZheC5zd2luZy5ib3Jk ZXIuVGl0bGVkQm9yZGVyKEFkbWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1p blJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVHRVNfU0NIRU1BKSArICIg KiIpKTsKICAgICAgICAgICAgICAgICAgamJBcHBseS5zZXRFbmFibGVkKHRy dWUpOwoqKioqKioqKioqKioqKioKKioqIDQ3MCw0NzYgKioqKgogIAogICAg ICBwcml2YXRlIHZvaWQgZGF0YWJhc2VQcml2aWxlZ2VDaGFuZ2UoamF2YS5i ZWFucy5Qcm9wZXJ0eUNoYW5nZUV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2 ZW50X2RhdGFiYXNlUHJpdmlsZWdlQ2hhbmdlCiAgICAgICAgICAvLyBBZGQg eW91ciBoYW5kbGluZyBjb2RlIGhlcmU6CiEgICAgICAgICBpZiAoZXZ0Lmdl dFByb3BlcnR5TmFtZSgpID09IENoZWNrQm94UGFuZWwuU0VMRUNUSU9OX01B REUpIHsKICAgICAgICAgICAgICBpZiAoanBEYXRhYmFzZVByaXYuZ2V0Q2hh bmdlZEluZGV4ZXMoKS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICAgICAg ICBqcERhdGFiYXNlLnNldEJvcmRlcihuZXcgamF2YXguc3dpbmcuYm9yZGVy LlRpdGxlZEJvcmRlcihBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5S ZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX0RBVEFCQVNFKSArICIg KiIpKTsKICAgICAgICAgICAgICAgICAgamJBcHBseS5zZXRFbmFibGVkKHRy dWUpOwotLS0gNDc1LDQ4MSAtLS0tCiAgCiAgICAgIHByaXZhdGUgdm9pZCBk YXRhYmFzZVByaXZpbGVnZUNoYW5nZShqYXZhLmJlYW5zLlByb3BlcnR5Q2hh bmdlRXZlbnQgZXZ0KSB7Ly9HRU4tRklSU1Q6ZXZlbnRfZGF0YWJhc2VQcml2 aWxlZ2VDaGFuZ2UKICAgICAgICAgIC8vIEFkZCB5b3VyIGhhbmRsaW5nIGNv ZGUgaGVyZToKISAgICAgICAgIGlmIChldnQuZ2V0UHJvcGVydHlOYW1lKCkg PT0gUHJpdmlsZWdlc0NoZWNrQm94UGFuZWwuU0VMRUNUSU9OX01BREUpIHsK ICAgICAgICAgICAgICBpZiAoanBEYXRhYmFzZVByaXYuZ2V0Q2hhbmdlZElu ZGV4ZXMoKS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICAgICAgICBqcERh dGFiYXNlLnNldEJvcmRlcihuZXcgamF2YXguc3dpbmcuYm9yZGVyLlRpdGxl ZEJvcmRlcihBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJj ZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX0RBVEFCQVNFKSArICIgKiIpKTsK ICAgICAgICAgICAgICAgICAgamJBcHBseS5zZXRFbmFibGVkKHRydWUpOwoq KioqKioqKioqKioqKioKKioqIDU2Miw1NzAgKioqKgogIAkJCQogIAkJZm9y IChpbnQgaT0wOyBpIDwgcHJpdk9mU2VsZWN0ZWRTY2hlbWEubGVuZ3RoOyBp KyspIHsKICAJCQlpZiAobmFtZS5jb21wYXJlVG8oIHByaXZPZlNlbGVjdGVk U2NoZW1hW2ldWzBdKSA9PSAwKSB7CQkJCQkKISAJCQkJZm9yIChpbnQgaj0x OyBqPHByaXZPZlNlbGVjdGVkU2NoZW1hW2ldLmxlbmd0aDsgaisrKSB7CiEg CQkJCQlqcFNjaGVtYVByaXYuc2V0U2VsZWN0ZWRCb3gocHJpdk9mU2VsZWN0 ZWRTY2hlbWFbaV1bal0sIHRydWUpOwohIAkJCQl9CiAgCQkJfQkJCQkJCiAg CQl9CiAgCQkJCi0tLSA1NjcsNTc3IC0tLS0KICAJCQkKICAJCWZvciAoaW50 IGk9MDsgaSA8IHByaXZPZlNlbGVjdGVkU2NoZW1hLmxlbmd0aDsgaSsrKSB7 CiAgCQkJaWYgKG5hbWUuY29tcGFyZVRvKCBwcml2T2ZTZWxlY3RlZFNjaGVt YVtpXVswXSkgPT0gMCkgewkJCQkJCiEgCQkJCWpwU2NoZW1hUHJpdi5zZXRT ZWxlY3RlZEJveChwcml2T2ZTZWxlY3RlZFNjaGVtYVtpXVsxXSwgdHJ1ZSk7 CiEgCQkJCQohIAkJCQlpZiAocHJpdk9mU2VsZWN0ZWRTY2hlbWFbaV1bM10u ZXF1YWxzKCJZRVMiKSkKISAJCQkJCWpwU2NoZW1hUHJpdi5zZXRTZWxlY3Rl ZFNlY29uZGFyeUJveChwcml2T2ZTZWxlY3RlZFNjaGVtYVtpXVsxXSwgdHJ1 ZSk7CiEgCQkJCQogIAkJCX0JCQkJCQogIAkJfQogIAkJCQoqKioqKioqKioq KioqKioKKioqIDY2Nyw2NzUgKioqKgogICAgICAgICAgICAgICAgICAKICAJ CWZvciAoaW50IGk9MDsgaSA8IHByaXZPZlNlbGVjdGVkRGF0YWJhc2UubGVu Z3RoOyBpKyspIHsKICAJCQlpZiAobmFtZS5jb21wYXJlVG8oIHByaXZPZlNl bGVjdGVkRGF0YWJhc2VbaV1bMF0pID09IDApIHsJCQkJCQohIAkJCQlmb3Ig KGludCBqPTE7IGo8cHJpdk9mU2VsZWN0ZWREYXRhYmFzZVtpXS5sZW5ndGg7 IGorKykgewohIAkJCQkJanBEYXRhYmFzZVByaXYuc2V0U2VsZWN0ZWRCb3go cHJpdk9mU2VsZWN0ZWREYXRhYmFzZVtpXVtqXSwgdHJ1ZSk7CiAgCQkJCX0K ICAJCQl9CQkJCQkKICAJCX0KICAJCQkKLS0tIDY3NCw2ODUgLS0tLQogICAg ICAgICAgICAgICAgICAKICAJCWZvciAoaW50IGk9MDsgaSA8IHByaXZPZlNl bGVjdGVkRGF0YWJhc2UubGVuZ3RoOyBpKyspIHsKICAJCQlpZiAobmFtZS5j b21wYXJlVG8oIHByaXZPZlNlbGVjdGVkRGF0YWJhc2VbaV1bMF0pID09IDAp IHsJCQkJCQohIAkJCQlqcERhdGFiYXNlUHJpdi5zZXRTZWxlY3RlZEJveChw cml2T2ZTZWxlY3RlZERhdGFiYXNlW2ldWzFdLCB0cnVlKTsKISAKISAJCQkJ aWYgKHByaXZPZlNlbGVjdGVkRGF0YWJhc2VbaV1bM10uZXF1YWxzKCJZRVMi KSkgewohIAkJCQkJanBEYXRhYmFzZVByaXYuc2V0U2VsZWN0ZWRTZWNvbmRh cnlCb3gocHJpdk9mU2VsZWN0ZWREYXRhYmFzZVtpXVsxXSwgdHJ1ZSk7CiAg CQkJCX0KKyAKICAJCQl9CQkJCQkKICAJCX0KICAJCQkKKioqKioqKioqKioq KioqCioqKiA3NDMsNzQ5ICoqKioKICAJCQlmb3IgKGludCBpPTA7IGkgPCBw cml2T2ZTZWxlY3RlZEZ1bmN0aW9uLmxlbmd0aDsgaSsrKSB7CiAgCQkJCQog IAkJCQlpZiAobmFtZS5jb21wYXJlVG8oIHByaXZPZlNlbGVjdGVkRnVuY3Rp b25baV1bMF0pID09IDApIHsKISAJCQkJCWpwRnVuY3Rpb25Qcml2LnNldFNl bGVjdGVkQm94KHByaXZPZlNlbGVjdGVkRnVuY3Rpb25baV1bMV0sIHRydWUp OwkJCQkJCiAgCQkJCX0JCQkJCQogIAkJCQkJCQkJCiAgCQkJfQotLS0gNzUz LDc2MyAtLS0tCiAgCQkJZm9yIChpbnQgaT0wOyBpIDwgcHJpdk9mU2VsZWN0 ZWRGdW5jdGlvbi5sZW5ndGg7IGkrKykgewogIAkJCQkKICAJCQkJaWYgKG5h bWUuY29tcGFyZVRvKCBwcml2T2ZTZWxlY3RlZEZ1bmN0aW9uW2ldWzBdKSA9 PSAwKSB7CiEgCQkJCQlqcEZ1bmN0aW9uUHJpdi5zZXRTZWxlY3RlZEJveChw cml2T2ZTZWxlY3RlZEZ1bmN0aW9uW2ldWzFdLCB0cnVlKTsKISAKISAJCQkJ CWlmIChwcml2T2ZTZWxlY3RlZEZ1bmN0aW9uW2ldWzNdLmVxdWFscygiWUVT IikpIHsKISAJCQkJCQlqcEZ1bmN0aW9uUHJpdi5zZXRTZWxlY3RlZFNlY29u ZGFyeUJveChwcml2T2ZTZWxlY3RlZEZ1bmN0aW9uW2ldWzFdLCB0cnVlKTsK ISAJCQkJCX0KICAJCQkJfQkJCQkJCiAgCQkJCQkJCQkKICAJCQl9CioqKioq KioqKioqKioqKgoqKiogODA2LDgxMiAqKioqCiAgCQkJCiAgCQkJZm9yIChp bnQgaT0wOyBpIDwgcHJpdk9mU2VsZWN0ZWRMYW5ndWFnZS5sZW5ndGg7IGkr KykgewkKICAJCQkJaWYgKG5hbWUuY29tcGFyZVRvKCBwcml2T2ZTZWxlY3Rl ZExhbmd1YWdlW2ldWzBdKSA9PSAwKSB7CQkJCQkKISAJCQkJCWpwTGFuZ3Vh Z2VzUHJpdi5zZXRTZWxlY3RlZEJveChwcml2T2ZTZWxlY3RlZExhbmd1YWdl W2ldWzFdLCB0cnVlKTsJCQkJCQogIAkJCQl9CQkJCQkKICAJCQl9CiAgCQkJ Ci0tLSA4MjAsODMwIC0tLS0KICAJCQkKICAJCQlmb3IgKGludCBpPTA7IGkg PCBwcml2T2ZTZWxlY3RlZExhbmd1YWdlLmxlbmd0aDsgaSsrKSB7CQogIAkJ CQlpZiAobmFtZS5jb21wYXJlVG8oIHByaXZPZlNlbGVjdGVkTGFuZ3VhZ2Vb aV1bMF0pID09IDApIHsJCQkJCQohIAkJCQkJanBMYW5ndWFnZXNQcml2LnNl dFNlbGVjdGVkQm94KHByaXZPZlNlbGVjdGVkTGFuZ3VhZ2VbaV1bMV0sIHRy dWUpOwohIAohIAkJCQkJaWYgKHByaXZPZlNlbGVjdGVkTGFuZ3VhZ2VbaV1b M10uZXF1YWxzKCJZRVMiKSkgewohIAkJCQkJCWpwTGFuZ3VhZ2VzUHJpdi5z ZXRTZWxlY3RlZFNlY29uZGFyeUJveChwcml2T2ZTZWxlY3RlZExhbmd1YWdl W2ldWzFdLCB0cnVlKTsKISAJCQkJCX0KICAJCQkJfQkJCQkJCiAgCQkJfQog IAkJCQoqKioqKioqKioqKioqKioKKioqIDg2MCw4NzMgKioqKgogIAkJCiAg CQl0cnkgewogIAkJCUFkbWluRGF0YWJhc2VNZXRhRGF0YSBkYm1kID0gdGhp cy5iYWNrZW5kQ2xpZW50LmdldEFkbWluRGF0YWJhc2VNZXRhRGF0YShjbHVz dGVyLGRhdGFiYXNlKTsKISAgICAgICAgIAkgICAgICAgIFN0cmluZ1tdW10g cHJpdk9mU2VsZWN0ZWRTZXF1ZW5jZSA9IGJhY2tlbmRDbGllbnQucmVzdWx0 U2V0VG9TdHJpbmdBcnJheShkYm1kLmdldFNlcXVlbmNlUHJpdmlsZWdlcyhz Y2hlbWEsc2VxdWVuY2UpLCAobmV3IFByb2Nlc3NMZWFzZSgpKSk7CiAgCQkJ CiAgCQkJZm9yIChpbnQgaT0wOyBpIDwgcHJpdk9mU2VsZWN0ZWRTZXF1ZW5j ZS5sZW5ndGg7IGkrKykgewohIAkJCQlpZiAobmFtZS5jb21wYXJlVG8oIHBy aXZPZlNlbGVjdGVkU2VxdWVuY2VbaV1bMF0pID09IDApIHsJCQkJCQohIAkJ CQkJZm9yIChpbnQgaj0xOyBqPHByaXZPZlNlbGVjdGVkU2VxdWVuY2VbaV0u bGVuZ3RoOyBqKyspIHsKISAJCQkJCQlqcFNlcXVlbmNlc1ByaXYuc2V0U2Vs ZWN0ZWRCb3gocHJpdk9mU2VsZWN0ZWRTZXF1ZW5jZVtpXVtqXSwgdHJ1ZSk7 CiAgCQkJCQl9CiEgCQkJCX0JCQkJCQogIAkJCX0KICAJCQkKICAJCX0gY2F0 Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0tLSA4NzgsODkzIC0tLS0KICAJCQogIAkJ dHJ5IHsKICAJCQlBZG1pbkRhdGFiYXNlTWV0YURhdGEgZGJtZCA9IHRoaXMu YmFja2VuZENsaWVudC5nZXRBZG1pbkRhdGFiYXNlTWV0YURhdGEoY2x1c3Rl cixkYXRhYmFzZSk7CiEgCQkJU3RyaW5nW11bXSBwcml2T2ZTZWxlY3RlZFNl cXVlbmNlID0gYmFja2VuZENsaWVudC5yZXN1bHRTZXRUb1N0cmluZ0FycmF5 KGRibWQuZ2V0U2VxdWVuY2VQcml2aWxlZ2VzKHNjaGVtYSxzZXF1ZW5jZSks IChuZXcgUHJvY2Vzc0xlYXNlKCkpKTsKICAJCQkKICAJCQlmb3IgKGludCBp PTA7IGkgPCBwcml2T2ZTZWxlY3RlZFNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7 CiEgCQkJCWlmIChuYW1lLmNvbXBhcmVUbyggcHJpdk9mU2VsZWN0ZWRTZXF1 ZW5jZVtpXVswXSkgPT0gMCkgewohIAkJCQkJanBTZXF1ZW5jZXNQcml2LnNl dFNlbGVjdGVkQm94KHByaXZPZlNlbGVjdGVkU2VxdWVuY2VbaV1bMV0sIHRy dWUpOwohIAkJCQkJCiEgCQkJCQlpZiAocHJpdk9mU2VsZWN0ZWRTZXF1ZW5j ZVtpXVszXS5lcXVhbHMoIllFUyIpKSB7CiEgCQkJCQkJanBTZXF1ZW5jZXNQ cml2LnNldFNlbGVjdGVkU2Vjb25kYXJ5Qm94KHByaXZPZlNlbGVjdGVkU2Vx dWVuY2VbaV1bMV0sIHRydWUpOwogIAkJCQkJfQohIAkJCQl9CiAgCQkJfQog IAkJCQogIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKioqKioqKioqKioq KioqCioqKiA4NzUsODkyICoqKioKICAJCQlkaXNwbGF5RXJyb3IoZS5nZXRN ZXNzYWdlKCkpOwogIAkJfQogIAkJCiEgICAgICAgICAgICAgfSBlbHNlIGlm IChqbFNlcXVlbmNlcy5nZXRTZWxlY3RlZEluZGljZXMoKS5sZW5ndGggPiAx KSB7CiAgCQkJCWp0cE9iamVjdHMuc2V0VGl0bGVBdCgyLCBBZG1pblJlc291 cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklW SUxFR0VTX1NFUVVFTkNFUykgKyAiICoiKTsKISAgICAgICAgICAgICAgICAg amJBcHBseS5zZXRFbmFibGVkKHRydWUpOwohICAgICAgICAgICAgICAgICBz ZXFQcml2Q2hhbmdlZCA9IHRydWU7CiAgCQkJfQohICAgICAgICAgfSBlbHNl IHsKISAgICAgICAgICAgICBqcFNlcXVlbmNlc1ByaXYuc2V0RW5hYmxlZChm YWxzZSk7CiEgICAgICAgICAgICAganBTZXF1ZW5jZXNQcml2LnJlc2V0KCk7 CiEgICAgICAgICAgICAgc2VxUHJpdkNoYW5nZWQgPSBmYWxzZTsKISAgICAg ICAgICAgICBqdHBPYmplY3RzLnNldFRpdGxlQXQoMiwgQWRtaW5SZXNvdXJj ZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklM RUdFU19TRVFVRU5DRVMpKTsKISAgICAgICAgICAgICB1cGRhdGVBcHBseVN0 YXR1cygpOwohICAgICAgICAgfQogICAgICB9Ly9HRU4tTEFTVDpldmVudF9z ZXF1ZW5jZVNlbGVjdGVkCiAgCiAgICAgIHByaXZhdGUgdm9pZCB2aWV3U2Vs ZWN0ZWQoamF2YXguc3dpbmcuZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50IGV2 dCkgey8vR0VOLUZJUlNUOmV2ZW50X3ZpZXdTZWxlY3RlZAotLS0gODk1LDkx MiAtLS0tCiAgCQkJZGlzcGxheUVycm9yKGUuZ2V0TWVzc2FnZSgpKTsKICAJ CX0KICAJCQohIAkJCX0gZWxzZSBpZiAoamxTZXF1ZW5jZXMuZ2V0U2VsZWN0 ZWRJbmRpY2VzKCkubGVuZ3RoID4gMSkgewogIAkJCQlqdHBPYmplY3RzLnNl dFRpdGxlQXQoMiwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVz b3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19TRVFVRU5DRVMpICsgIiAq Iik7CiEgCQkJCWpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKISAJCQkJc2Vx UHJpdkNoYW5nZWQgPSB0cnVlOwogIAkJCX0KISAJCX0gZWxzZSB7CiEgCQkJ anBTZXF1ZW5jZXNQcml2LnNldEVuYWJsZWQoZmFsc2UpOwohIAkJCWpwU2Vx dWVuY2VzUHJpdi5yZXNldCgpOwohIAkJCXNlcVByaXZDaGFuZ2VkID0gZmFs c2U7CiEgCQkJanRwT2JqZWN0cy5zZXRUaXRsZUF0KDIsIEFkbWluUmVzb3Vy Y2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJ TEVHRVNfU0VRVUVOQ0VTKSk7CiEgCQkJdXBkYXRlQXBwbHlTdGF0dXMoKTsK ISAJCX0KICAgICAgfS8vR0VOLUxBU1Q6ZXZlbnRfc2VxdWVuY2VTZWxlY3Rl ZAogIAogICAgICBwcml2YXRlIHZvaWQgdmlld1NlbGVjdGVkKGphdmF4LnN3 aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25FdmVudCBldnQpIHsvL0dFTi1GSVJT VDpldmVudF92aWV3U2VsZWN0ZWQKKioqKioqKioqKioqKioqCioqKiA5MjIs OTU3ICoqKioKICAJCQogIAkJdHJ5IHsKICAJCQlBZG1pbkRhdGFiYXNlTWV0 YURhdGEgZGJtZCA9IHRoaXMuYmFja2VuZENsaWVudC5nZXRBZG1pbkRhdGFi YXNlTWV0YURhdGEoY2x1c3RlcixkYXRhYmFzZSk7CiEgICAgICAgICAJICAg ICAgICBTdHJpbmdbXVtdIHByaXZPZlNlbGVjdGVkVmlldyA9IGJhY2tlbmRD bGllbnQucmVzdWx0U2V0VG9TdHJpbmdBcnJheShkYm1kLmdldFZpZXdQcml2 aWxlZ2VzKHNjaGVtYSx2aWV3KSwgKG5ldyBQcm9jZXNzTGVhc2UoKSkpOwoh IAkJCQohIAkJCQohIAkJCQogIAkJCWZvciAoaW50IGk9MDsgaSA8IHByaXZP ZlNlbGVjdGVkVmlldy5sZW5ndGg7IGkrKykgewogIAkJCQlpZiAobmFtZS5j b21wYXJlVG8oIHByaXZPZlNlbGVjdGVkVmlld1tpXVswXSkgPT0gMCkgewoh IAkJCQkJZm9yIChpbnQgaj0xOyBqPHByaXZPZlNlbGVjdGVkVmlld1tpXS5s ZW5ndGg7IGorKykgewohIAkJCQkJCWpwVmlld1ByaXYuc2V0U2VsZWN0ZWRC b3gocHJpdk9mU2VsZWN0ZWRWaWV3W2ldW2pdLCB0cnVlKTsKICAJCQkJCX0K ISAJCQkJfQkJCQkJCiAgCQkJfQogIAkJCQotIAkJCQogIAkJfSBjYXRjaCAo RXhjZXB0aW9uIGUpIHsKICAJCQllLnByaW50U3RhY2tUcmFjZSgpOwogIAkJ CWRpc3BsYXlFcnJvcihlLmdldE1lc3NhZ2UoKSk7CiAgCQl9CiEgCiEgICAg ICAgICAgICAgfSBlbHNlIGlmIChqbFZpZXdzLmdldFNlbGVjdGVkSW5kaWNl cygpLmxlbmd0aCA+IDEpIHsKICAJCQkJanRwT2JqZWN0cy5zZXRUaXRsZUF0 KDEsIEFkbWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5E TEdfTUFOQUdFX1BSSVZJTEVHRVNfVklFV1MpICsgIiAqIik7CiEgICAgICAg ICAgICAgICAgIGpiQXBwbHkuc2V0RW5hYmxlZCh0cnVlKTsKISAgICAgICAg ICAgICAgICAgdmlld1ByaXZDaGFuZ2VkID0gdHJ1ZTsKICAJCQl9CiEgICAg ICAgICB9IGVsc2UgewohICAgICAgICAgICAgIGpwVmlld1ByaXYuc2V0RW5h YmxlZChmYWxzZSk7CiEgICAgICAgICAgICAganBWaWV3UHJpdi5yZXNldCgp OwohICAgICAgICAgICAgIHZpZXdQcml2Q2hhbmdlZCA9IGZhbHNlOwohICAg ICAgICAgICAgIGp0cE9iamVjdHMuc2V0VGl0bGVBdCgxLCBBZG1pblJlc291 cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklW SUxFR0VTX1ZJRVdTKSk7CiEgICAgICAgICAgICAgdXBkYXRlQXBwbHlTdGF0 dXMoKTsKISAgICAgICAgIH0KICAgICAgfS8vR0VOLUxBU1Q6ZXZlbnRfdmll d1NlbGVjdGVkCiAgCiAgICAgIHByaXZhdGUgdm9pZCB0YWJsZVNlbGVjdGVk KGphdmF4LnN3aW5nLmV2ZW50Lkxpc3RTZWxlY3Rpb25FdmVudCBldnQpIHsv L0dFTi1GSVJTVDpldmVudF90YWJsZVNlbGVjdGVkCi0tLSA5NDIsOTc2IC0t LS0KICAJCQogIAkJdHJ5IHsKICAJCQlBZG1pbkRhdGFiYXNlTWV0YURhdGEg ZGJtZCA9IHRoaXMuYmFja2VuZENsaWVudC5nZXRBZG1pbkRhdGFiYXNlTWV0 YURhdGEoY2x1c3RlcixkYXRhYmFzZSk7CiEgCQkJU3RyaW5nW11bXSBwcml2 T2ZTZWxlY3RlZFZpZXcgPSBiYWNrZW5kQ2xpZW50LnJlc3VsdFNldFRvU3Ry aW5nQXJyYXkoZGJtZC5nZXRWaWV3UHJpdmlsZWdlcyhzY2hlbWEsdmlldyks IChuZXcgUHJvY2Vzc0xlYXNlKCkpKTsKISAKICAJCQlmb3IgKGludCBpPTA7 IGkgPCBwcml2T2ZTZWxlY3RlZFZpZXcubGVuZ3RoOyBpKyspIHsKICAJCQkJ aWYgKG5hbWUuY29tcGFyZVRvKCBwcml2T2ZTZWxlY3RlZFZpZXdbaV1bMF0p ID09IDApIHsKISAJCQkJCWpwVmlld1ByaXYuc2V0U2VsZWN0ZWRCb3gocHJp dk9mU2VsZWN0ZWRWaWV3W2ldWzFdLCB0cnVlKTsKISAJCQkJCQohIAkJCQkJ aWYgKHByaXZPZlNlbGVjdGVkVmlld1tpXVszXS5lcXVhbHMoIllFUyIpKSB7 CiEgCQkJCQkJanBWaWV3UHJpdi5zZXRTZWxlY3RlZFNlY29uZGFyeUJveChw cml2T2ZTZWxlY3RlZFZpZXdbaV1bMV0sIHRydWUpOwogIAkJCQkJfQohIAkJ CQl9CiAgCQkJfQogIAkJCQogIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsK ICAJCQllLnByaW50U3RhY2tUcmFjZSgpOwogIAkJCWRpc3BsYXlFcnJvcihl LmdldE1lc3NhZ2UoKSk7CiAgCQl9CiEgCQkKISAJCQl9IGVsc2UgaWYgKGps Vmlld3MuZ2V0U2VsZWN0ZWRJbmRpY2VzKCkubGVuZ3RoID4gMSkgewogIAkJ CQlqdHBPYmplY3RzLnNldFRpdGxlQXQoMSwgQWRtaW5SZXNvdXJjZXMuZ2V0 U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19W SUVXUykgKyAiICoiKTsKISAJCQkJamJBcHBseS5zZXRFbmFibGVkKHRydWUp OwohIAkJCQl2aWV3UHJpdkNoYW5nZWQgPSB0cnVlOwogIAkJCX0KISAJCX0g ZWxzZSB7CiEgCQkJanBWaWV3UHJpdi5zZXRFbmFibGVkKGZhbHNlKTsKISAJ CQlqcFZpZXdQcml2LnJlc2V0KCk7CiEgCQkJdmlld1ByaXZDaGFuZ2VkID0g ZmFsc2U7CiEgCQkJanRwT2JqZWN0cy5zZXRUaXRsZUF0KDEsIEFkbWluUmVz b3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BS SVZJTEVHRVNfVklFV1MpKTsKISAJCQl1cGRhdGVBcHBseVN0YXR1cygpOwoh IAkJfQogICAgICB9Ly9HRU4tTEFTVDpldmVudF92aWV3U2VsZWN0ZWQKICAK ICAgICAgcHJpdmF0ZSB2b2lkIHRhYmxlU2VsZWN0ZWQoamF2YXguc3dpbmcu ZXZlbnQuTGlzdFNlbGVjdGlvbkV2ZW50IGV2dCkgey8vR0VOLUZJUlNUOmV2 ZW50X3RhYmxlU2VsZWN0ZWQKKioqKioqKioqKioqKioqCioqKiA5ODcsMTAw NiAqKioqCiAgCQkKICAJCXRyeSB7CiAgCQkJQWRtaW5EYXRhYmFzZU1ldGFE YXRhIGRibWQgPSB0aGlzLmJhY2tlbmRDbGllbnQuZ2V0QWRtaW5EYXRhYmFz ZU1ldGFEYXRhKGNsdXN0ZXIsZGF0YWJhc2UpOwohICAgICAgICAgCSAgICAg ICAgU3RyaW5nW11bXSBwcml2T2ZTZWxlY3RlZFRhYmxlID0gYmFja2VuZENs aWVudC5yZXN1bHRTZXRUb1N0cmluZ0FycmF5KGRibWQuZ2V0VGFibGVQcml2 aWxlZ2VzKG51bGwsIHNjaGVtYSwgdGFibGUpLCAobmV3IFByb2Nlc3NMZWFz ZSgpKSk7CiAgCQogIAkJCWZvciAoaW50IGk9MDsgaSA8IHByaXZPZlNlbGVj dGVkVGFibGUubGVuZ3RoOyBpKyspIHsKISAJCQkJCiEgCQkJCWlmIChwcml2 T2ZTZWxlY3RlZFRhYmxlW2ldWzRdID09IG51bGwpCiEgCQkJCQljb250aW51 ZTsKISAJCQkJCiEgCQkJCWZvciAoaW50IGs9aSsxOyBrIDwgcHJpdk9mU2Vs ZWN0ZWRUYWJsZS5sZW5ndGg7IGsrKykgewogIAkJCQkJCQohIAkJCQkJaWYg KHByaXZPZlNlbGVjdGVkVGFibGVba11bNF0gIT0gbnVsbCAmJiBwcml2T2ZT ZWxlY3RlZFRhYmxlW2tdWzRdLmVxdWFscyhuYW1lKSkgewohIAkJCQkJCWpw VGFibGVQcml2LnNldFNlbGVjdGVkQm94KHByaXZPZlNlbGVjdGVkVGFibGVb a11bNV0sIHRydWUpOwogIAkJCQkJfQogIAkJCQl9Ci0gCQkJCQkJCiAgCQkJ fQogIAkJCQogIAkJCQotLS0gMTAwNiwxMDIxIC0tLS0KICAJCQogIAkJdHJ5 IHsKICAJCQlBZG1pbkRhdGFiYXNlTWV0YURhdGEgZGJtZCA9IHRoaXMuYmFj a2VuZENsaWVudC5nZXRBZG1pbkRhdGFiYXNlTWV0YURhdGEoY2x1c3Rlcixk YXRhYmFzZSk7CiEgCQkJU3RyaW5nW11bXSBwcml2T2ZTZWxlY3RlZFRhYmxl ID0gYmFja2VuZENsaWVudC5yZXN1bHRTZXRUb1N0cmluZ0FycmF5KGRibWQu Z2V0VGFibGVQcml2aWxlZ2VzKG51bGwsIHNjaGVtYSwgdGFibGUpLCAobmV3 IFByb2Nlc3NMZWFzZSgpKSk7CiAgCQogIAkJCWZvciAoaW50IGk9MDsgaSA8 IHByaXZPZlNlbGVjdGVkVGFibGUubGVuZ3RoOyBpKyspIHsKISAJCQkJaWYg KG5hbWUuY29tcGFyZVRvKCBwcml2T2ZTZWxlY3RlZFRhYmxlW2ldWzRdKSA9 PSAwKSB7CiEgCQkJCQlqcFRhYmxlUHJpdi5zZXRTZWxlY3RlZEJveChwcml2 T2ZTZWxlY3RlZFRhYmxlW2ldWzVdLCB0cnVlKTsKICAJCQkJCQkKISAJCQkJ CWlmIChwcml2T2ZTZWxlY3RlZFRhYmxlW2ldWzZdLmVxdWFscygiWUVTIikp IHsKISAJCQkJCQlqcFRhYmxlUHJpdi5zZXRTZWxlY3RlZFNlY29uZGFyeUJv eChwcml2T2ZTZWxlY3RlZFRhYmxlW2ldWzVdLCB0cnVlKTsKICAJCQkJCX0K ICAJCQkJfQogIAkJCX0KICAJCQkKICAJCQkKKioqKioqKioqKioqKioqCioq KiAxMTE1LDExMzIgKioqKgogIAkKICAJaWYgKGRiUHJpdkNoYW5nZWQpIHsK ICAJCQohIAkJU3RyaW5nW10gZWZmZWN0ZWRQcml2ZWxlZ2VzID0ganBEYXRh YmFzZVByaXYuZ2V0U2VsZWN0ZWRCb3hlcygpOwogIAkJCiAgCQkvLyBDcmVh dGUgbmV3IHNldCBpbmNsdWRpbmcgdGhlIHByaXZpbGVnZXMgdGhhdCB3ZXJl IGVmZmVjdGVkCiAgICAgICAgICAJCiAgCQlIYXNodGFibGUgcHJpdlNldCA9 IG5ldyBIYXNodGFibGUoKTsKISAgICAgICAgIAlmb3IgKGludCBpID0gMDsg aSA8IGVmZmVjdGVkUHJpdmVsZWdlcy5sZW5ndGg7IGkrKykgewohICAgICAg ICAgICAgIAkJcHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBl ZmZlY3RlZFByaXZlbGVnZXNbaV0pOwogIAkJfQogIAkJCiAgCQlwYXJhbWV0 ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fREFUQUJBU0VfUFJJVklMRUdF UywgcHJpdlNldCk7CiAgCi0gCSAgICAgICAKICAJCS8vIENyZWF0ZSBuZXcg c2V0IGluY2x1ZGluZyBkYXRhYmFzZSB0aGF0IHdhcyBlZmZlY3RlZAogIAkJ CiAgCQlIYXNodGFibGUgZGF0YWJhc2VTZXQgPSBuZXcgSGFzaHRhYmxlKCk7 CQkKLS0tIDExMzAsMTE1NCAtLS0tCiAgCQogIAlpZiAoZGJQcml2Q2hhbmdl ZCkgewogIAkJCiEgCQlTdHJpbmdbXSBlZmZlY3RlZFByaXZlbGVnZXMgPSBq cERhdGFiYXNlUHJpdi5nZXRQcmltYXJ5T25seVNlbGVjdGVkQm94ZXMoKTsK ISAJCVN0cmluZ1tdIGVmZmVjdGVkV2l0aEdyYW50UHJpdmlsZWdlcyA9IGpw RGF0YWJhc2VQcml2LmdldFNlbGVjdGVkU2Vjb25kYXJ5Qm94ZXMoKTsKICAJ CQogIAkJLy8gQ3JlYXRlIG5ldyBzZXQgaW5jbHVkaW5nIHRoZSBwcml2aWxl Z2VzIHRoYXQgd2VyZSBlZmZlY3RlZAogICAgICAgICAgCQogIAkJSGFzaHRh YmxlIHByaXZTZXQgPSBuZXcgSGFzaHRhYmxlKCk7CiEgICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGVmZmVjdGVkUHJpdmVsZWdlcy5sZW5ndGg7IGkr KykgewohIAkJCXByaXZTZXQucHV0KGVmZmVjdGVkUHJpdmVsZWdlc1tpXSwg ZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldKTsKISAJCX0KISAJCQohIAkJSGFzaHRh YmxlIHdpdGhHcmFudFByaXZTZXQgPSBuZXcgSGFzaHRhYmxlKCk7CiEgCQkK ISAJCWZvciAoaW50IGkgPSAwOyBpIDwgZWZmZWN0ZWRXaXRoR3JhbnRQcml2 aWxlZ2VzLmxlbmd0aDsgaSsrKSB7CiEgCQkJd2l0aEdyYW50UHJpdlNldC5w dXQoZWZmZWN0ZWRXaXRoR3JhbnRQcml2aWxlZ2VzW2ldLCBlZmZlY3RlZFdp dGhHcmFudFByaXZpbGVnZXNbaV0pOwogIAkJfQogIAkJCiAgCQlwYXJhbWV0 ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fREFUQUJBU0VfUFJJVklMRUdF UywgcHJpdlNldCk7CisgCQlwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUu UEFSQU1fREFUQUJBU0VfUFJJVklMRUdFU19XSVRIX0dSQU5ULCB3aXRoR3Jh bnRQcml2U2V0KTsKICAKICAJCS8vIENyZWF0ZSBuZXcgc2V0IGluY2x1ZGlu ZyBkYXRhYmFzZSB0aGF0IHdhcyBlZmZlY3RlZAogIAkJCiAgCQlIYXNodGFi bGUgZGF0YWJhc2VTZXQgPSBuZXcgSGFzaHRhYmxlKCk7CQkKKioqKioqKioq KioqKioqCioqKiAxMTQxLDExNDcgKioqKgogIAkKICAJaWYgKHNjaGVtYVBy aXZDaGFuZ2VkKSB7CiAgCQkKISAJCVN0cmluZ1tdIGVmZmVjdGVkUHJpdmVs ZWdlcyA9IGpwU2NoZW1hUHJpdi5nZXRTZWxlY3RlZEJveGVzKCk7CiAgCQkK ICAJCS8vIENyZWF0ZSBuZXcgc2V0IGluY2x1ZGluZyB0aGUgcHJpdmlsZWdl cyB0aGF0IHdlcmUgZWZmZWN0ZWQKICAgICAgICAgIAkKLS0tIDExNjMsMTE3 MCAtLS0tCiAgCQogIAlpZiAoc2NoZW1hUHJpdkNoYW5nZWQpIHsKICAJCQoh IAkJU3RyaW5nW10gZWZmZWN0ZWRQcml2ZWxlZ2VzID0ganBTY2hlbWFQcml2 LmdldFByaW1hcnlPbmx5U2VsZWN0ZWRCb3hlcygpOwohIAkJU3RyaW5nW10g ZWZmZWN0ZWRXaXRoR3JhbnRQcml2aWxlZ2VzID0ganBTY2hlbWFQcml2Lmdl dFNlbGVjdGVkU2Vjb25kYXJ5Qm94ZXMoKTsKICAJCQogIAkJLy8gQ3JlYXRl IG5ldyBzZXQgaW5jbHVkaW5nIHRoZSBwcml2aWxlZ2VzIHRoYXQgd2VyZSBl ZmZlY3RlZAogICAgICAgICAgCQoqKioqKioqKioqKioqKioKKioqIDExNTAs MTE1NiAqKioqCi0tLSAxMTczLDExODYgLS0tLQogICAgICAgICAgICAgIAkJ cHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBlZmZlY3RlZFBy aXZlbGVnZXNbaV0pOwogIAkJfQogIAkJCisgCQlIYXNodGFibGUgd2l0aEdy YW50UHJpdlNldCA9IG5ldyBIYXNodGFibGUoKTsKKyAJCQorIAkJZm9yIChp bnQgaSA9IDA7IGkgPCBlZmZlY3RlZFdpdGhHcmFudFByaXZpbGVnZXMubGVu Z3RoOyBpKyspIHsKKyAJCQl3aXRoR3JhbnRQcml2U2V0LnB1dChlZmZlY3Rl ZFdpdGhHcmFudFByaXZpbGVnZXNbaV0sIGVmZmVjdGVkV2l0aEdyYW50UHJp dmlsZWdlc1tpXSk7CisgCQl9CisgCQkKICAJCXBhcmFtZXRlcnMucHV0KE9i amVjdFVwZGF0ZS5QQVJBTV9TQ0hFTUFfUFJJVklMRUdFUywgcHJpdlNldCk7 CisgCQlwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fU0NIRU1B X1BSSVZJTEVHRVNfV0lUSF9HUkFOVCwgd2l0aEdyYW50UHJpdlNldCk7CiAg CiAgCSAgICAgICAKICAJCS8vIENyZWF0ZSBuZXcgc2V0IGluY2x1ZGluZyBz Y2hlbWEgdGhhdCB3ZXJlIGVmZmVjdGVkCioqKioqKioqKioqKioqKgoqKiog MTE2NywxMTc0ICoqKioKICAJCiAgCWlmICh0YWJsZVByaXZDaGFuZ2VkKSB7 CiAgCQkKISAJCVN0cmluZ1tdIGVmZmVjdGVkUHJpdmVsZWdlcyA9IGpwVGFi bGVQcml2LmdldFNlbGVjdGVkQm94ZXMoKTsKISAJCQogIAkJLy8gQ3JlYXRl IG5ldyBzZXQgaW5jbHVkaW5nIHRoZSBwcml2aWxlZ2VzIHRoYXQgd2VyZSBl ZmZlY3RlZAogICAgICAgICAgCQogIAkJSGFzaHRhYmxlIHByaXZTZXQgPSBu ZXcgSGFzaHRhYmxlKCk7Ci0tLSAxMTk3LDEyMDUgLS0tLQogIAkKICAJaWYg KHRhYmxlUHJpdkNoYW5nZWQpIHsKICAJCQohIAkJU3RyaW5nW10gZWZmZWN0 ZWRQcml2ZWxlZ2VzID0ganBUYWJsZVByaXYuZ2V0UHJpbWFyeU9ubHlTZWxl Y3RlZEJveGVzKCk7CiEgCQlTdHJpbmdbXSBlZmZlY3RlZFdpdGhHcmFudFBy aXZpbGVnZXMgPSBqcFRhYmxlUHJpdi5nZXRTZWxlY3RlZFNlY29uZGFyeUJv eGVzKCk7CiEgCiAgCQkvLyBDcmVhdGUgbmV3IHNldCBpbmNsdWRpbmcgdGhl IHByaXZpbGVnZXMgdGhhdCB3ZXJlIGVmZmVjdGVkCiAgICAgICAgICAJCiAg CQlIYXNodGFibGUgcHJpdlNldCA9IG5ldyBIYXNodGFibGUoKTsKKioqKioq KioqKioqKioqCioqKiAxMTc2LDExODMgKioqKgogICAgICAgICAgICAgIAkJ cHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBlZmZlY3RlZFBy aXZlbGVnZXNbaV0pOwogIAkJfQogIAkJCiAgCQlwYXJhbWV0ZXJzLnB1dChP YmplY3RVcGRhdGUuUEFSQU1fVEFCTEVfUFJJVklMRUdFUywgcHJpdlNldCk7 CiEgCiAgCSAgICAgICAKICAJCS8vIENyZWF0ZSBuZXcgc2V0IGluY2x1ZGlu ZyB0YWJsZXMgdGhhdCB3ZXJlIGVmZmVjdGVkCiAgCQkKLS0tIDEyMDcsMTIy MCAtLS0tCiAgICAgICAgICAgICAgCQlwcml2U2V0LnB1dChlZmZlY3RlZFBy aXZlbGVnZXNbaV0sIGVmZmVjdGVkUHJpdmVsZWdlc1tpXSk7CiAgCQl9CiAg CQkKKyAJCUhhc2h0YWJsZSB3aXRoR3JhbnRQcml2U2V0ID0gbmV3IEhhc2h0 YWJsZSgpOworIAkJCisgCQlmb3IgKGludCBpID0gMDsgaSA8IGVmZmVjdGVk V2l0aEdyYW50UHJpdmlsZWdlcy5sZW5ndGg7IGkrKykgeworIAkJCXdpdGhH cmFudFByaXZTZXQucHV0KGVmZmVjdGVkV2l0aEdyYW50UHJpdmlsZWdlc1tp XSwgZWZmZWN0ZWRXaXRoR3JhbnRQcml2aWxlZ2VzW2ldKTsKKyAJCX0KKyAJ CQogIAkJcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX1RBQkxF X1BSSVZJTEVHRVMsIHByaXZTZXQpOwohIAkJcGFyYW1ldGVycy5wdXQoT2Jq ZWN0VXBkYXRlLlBBUkFNX1RBQkxFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCwg d2l0aEdyYW50UHJpdlNldCk7CiAgCSAgICAgICAKICAJCS8vIENyZWF0ZSBu ZXcgc2V0IGluY2x1ZGluZyB0YWJsZXMgdGhhdCB3ZXJlIGVmZmVjdGVkCiAg CQkKKioqKioqKioqKioqKioqCioqKiAxMTk2LDEyMDMgKioqKgogIAkKICAJ aWYgKHZpZXdQcml2Q2hhbmdlZCkgewogIAkJCiEgCQlTdHJpbmdbXSBlZmZl Y3RlZFByaXZlbGVnZXMgPSBqcFZpZXdQcml2LmdldFNlbGVjdGVkQm94ZXMo KTsKISAJCQogIAkJLy8gQ3JlYXRlIG5ldyBzZXQgaW5jbHVkaW5nIHRoZSBw cml2aWxlZ2VzIHRoYXQgd2VyZSBlZmZlY3RlZAogICAgICAgICAgCQogIAkJ SGFzaHRhYmxlIHByaXZTZXQgPSBuZXcgSGFzaHRhYmxlKCk7Ci0tLSAxMjMz LDEyNDEgLS0tLQogIAkKICAJaWYgKHZpZXdQcml2Q2hhbmdlZCkgewogIAkJ CiEgCQlTdHJpbmdbXSBlZmZlY3RlZFByaXZlbGVnZXMgPSBqcFZpZXdQcml2 LmdldFByaW1hcnlPbmx5U2VsZWN0ZWRCb3hlcygpOwohIAkJU3RyaW5nW10g ZWZmZWN0ZWRXaXRoR3JhbnRQcml2aWxlZ2VzID0ganBWaWV3UHJpdi5nZXRT ZWxlY3RlZFNlY29uZGFyeUJveGVzKCk7CiEgCiAgCQkvLyBDcmVhdGUgbmV3 IHNldCBpbmNsdWRpbmcgdGhlIHByaXZpbGVnZXMgdGhhdCB3ZXJlIGVmZmVj dGVkCiAgICAgICAgICAJCiAgCQlIYXNodGFibGUgcHJpdlNldCA9IG5ldyBI YXNodGFibGUoKTsKKioqKioqKioqKioqKioqCioqKiAxMjA1LDEyMTIgKioq KgogICAgICAgICAgICAgIAkJcHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxl Z2VzW2ldLCBlZmZlY3RlZFByaXZlbGVnZXNbaV0pOwogIAkJfQogIAkJCiAg CQlwYXJhbWV0ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fVklFV19QUklW SUxFR0VTLCBwcml2U2V0KTsKISAKICAJICAgICAgIAogIAkJLy8gQ3JlYXRl IG5ldyBzZXQgaW5jbHVkaW5nIHZpZXdzIHRoYXQgd2VyZSBlZmZlY3RlZAog IAkJCi0tLSAxMjQzLDEyNTYgLS0tLQogICAgICAgICAgICAgIAkJcHJpdlNl dC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBlZmZlY3RlZFByaXZlbGVn ZXNbaV0pOwogIAkJfQogIAkJCisgCQlIYXNodGFibGUgd2l0aEdyYW50UHJp dlNldCA9IG5ldyBIYXNodGFibGUoKTsKKyAJCQorIAkJZm9yIChpbnQgaSA9 IDA7IGkgPCBlZmZlY3RlZFdpdGhHcmFudFByaXZpbGVnZXMubGVuZ3RoOyBp KyspIHsKKyAJCQl3aXRoR3JhbnRQcml2U2V0LnB1dChlZmZlY3RlZFdpdGhH cmFudFByaXZpbGVnZXNbaV0sIGVmZmVjdGVkV2l0aEdyYW50UHJpdmlsZWdl c1tpXSk7CisgCQl9CisgCQkKICAJCXBhcmFtZXRlcnMucHV0KE9iamVjdFVw ZGF0ZS5QQVJBTV9WSUVXX1BSSVZJTEVHRVMsIHByaXZTZXQpOwohIAkJcGFy YW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX1ZJRVdfUFJJVklMRUdF U19XSVRIX0dSQU5ULCB3aXRoR3JhbnRQcml2U2V0KTsKICAJICAgICAgIAog IAkJLy8gQ3JlYXRlIG5ldyBzZXQgaW5jbHVkaW5nIHZpZXdzIHRoYXQgd2Vy ZSBlZmZlY3RlZAogIAkJCioqKioqKioqKioqKioqKgoqKiogMTIyNiwxMjMz ICoqKioKICAJCiAgCWlmIChzZXFQcml2Q2hhbmdlZCkgewogIAohIAkJU3Ry aW5nW10gZWZmZWN0ZWRQcml2ZWxlZ2VzID0ganBTZXF1ZW5jZXNQcml2Lmdl dFNlbGVjdGVkQm94ZXMoKTsKISAJCQogIAkJLy8gQ3JlYXRlIG5ldyBzZXQg aW5jbHVkaW5nIHRoZSBwcml2aWxlZ2VzIHRoYXQgd2VyZSBlZmZlY3RlZAog ICAgICAgICAgCQogIAkJSGFzaHRhYmxlIHByaXZTZXQgPSBuZXcgSGFzaHRh YmxlKCk7Ci0tLSAxMjcwLDEyNzggLS0tLQogIAkKICAJaWYgKHNlcVByaXZD aGFuZ2VkKSB7CiAgCiEgCQlTdHJpbmdbXSBlZmZlY3RlZFByaXZlbGVnZXMg PSBqcFNlcXVlbmNlc1ByaXYuZ2V0UHJpbWFyeU9ubHlTZWxlY3RlZEJveGVz KCk7CiEgCQlTdHJpbmdbXSBlZmZlY3RlZFdpdGhHcmFudFByaXZpbGVnZXMg PSBqcFNlcXVlbmNlc1ByaXYuZ2V0U2VsZWN0ZWRTZWNvbmRhcnlCb3hlcygp OwohIAogIAkJLy8gQ3JlYXRlIG5ldyBzZXQgaW5jbHVkaW5nIHRoZSBwcml2 aWxlZ2VzIHRoYXQgd2VyZSBlZmZlY3RlZAogICAgICAgICAgCQogIAkJSGFz aHRhYmxlIHByaXZTZXQgPSBuZXcgSGFzaHRhYmxlKCk7CioqKioqKioqKioq KioqKgoqKiogMTIzNiwxMjQzICoqKioKICAgICAgICAgICAgICAJCXByaXZT ZXQucHV0KGVmZmVjdGVkUHJpdmVsZWdlc1tpXSwgZWZmZWN0ZWRQcml2ZWxl Z2VzW2ldKTsKICAJCX0KICAJCiAgCQlwYXJhbWV0ZXJzLnB1dChPYmplY3RV cGRhdGUuUEFSQU1fU0VRVUVOQ0VfUFJJVklMRUdFUywgcHJpdlNldCk7CiEg CiAgCSAgICAgICAgCiAgCQkvLyBHZXQgYWxsIHRoZSBzZWxlY3RlZCBzZXF1 ZW5jZXMKICAJCQotLS0gMTI4MSwxMjk0IC0tLS0KICAgICAgICAgICAgICAJ CXByaXZTZXQucHV0KGVmZmVjdGVkUHJpdmVsZWdlc1tpXSwgZWZmZWN0ZWRQ cml2ZWxlZ2VzW2ldKTsKICAJCX0KICAJCisgCQlIYXNodGFibGUgd2l0aEdy YW50UHJpdlNldCA9IG5ldyBIYXNodGFibGUoKTsKKyAJCQorIAkJZm9yIChp bnQgaSA9IDA7IGkgPCBlZmZlY3RlZFdpdGhHcmFudFByaXZpbGVnZXMubGVu Z3RoOyBpKyspIHsKKyAJCQl3aXRoR3JhbnRQcml2U2V0LnB1dChlZmZlY3Rl ZFdpdGhHcmFudFByaXZpbGVnZXNbaV0sIGVmZmVjdGVkV2l0aEdyYW50UHJp dmlsZWdlc1tpXSk7CisgCQl9CisgCQkKICAJCXBhcmFtZXRlcnMucHV0KE9i amVjdFVwZGF0ZS5QQVJBTV9TRVFVRU5DRV9QUklWSUxFR0VTLCBwcml2U2V0 KTsKISAJCXBhcmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9TRVFV RU5DRV9QUklWSUxFR0VTX1dJVEhfR1JBTlQsIHdpdGhHcmFudFByaXZTZXQp OwogIAkgICAgICAgIAogIAkJLy8gR2V0IGFsbCB0aGUgc2VsZWN0ZWQgc2Vx dWVuY2VzCiAgCQkKKioqKioqKioqKioqKioqCioqKiAxMjU3LDEyNjMgKioq KgogIAkKICAJaWYgKGxhbmdQcml2Q2hhbmdlZCkgewogIAohIAkJU3RyaW5n W10gZWZmZWN0ZWRQcml2ZWxlZ2VzID0ganBMYW5ndWFnZXNQcml2LmdldFNl bGVjdGVkQm94ZXMoKTsKICAJCQogIAkJLy8gQ3JlYXRlIG5ldyBzZXQgaW5j bHVkaW5nIHRoZSBwcml2aWxlZ2VzIHRoYXQgd2VyZSBlZmZlY3RlZAogICAg ICAgICAgCQotLS0gMTMwOCwxMzE1IC0tLS0KICAJCiAgCWlmIChsYW5nUHJp dkNoYW5nZWQpIHsKICAKISAJCVN0cmluZ1tdIGVmZmVjdGVkUHJpdmVsZWdl cyA9IGpwTGFuZ3VhZ2VzUHJpdi5nZXRQcmltYXJ5T25seVNlbGVjdGVkQm94 ZXMoKTsKISAJCVN0cmluZ1tdIGVmZmVjdGVkV2l0aEdyYW50UHJpdmlsZWdl cyA9IGpwTGFuZ3VhZ2VzUHJpdi5nZXRTZWxlY3RlZFNlY29uZGFyeUJveGVz KCk7CiAgCQkKICAJCS8vIENyZWF0ZSBuZXcgc2V0IGluY2x1ZGluZyB0aGUg cHJpdmlsZWdlcyB0aGF0IHdlcmUgZWZmZWN0ZWQKICAgICAgICAgIAkKKioq KioqKioqKioqKioqCioqKiAxMjY3LDEyNzQgKioqKgogICAgICAgICAgICAg IAkJcHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBlZmZlY3Rl ZFByaXZlbGVnZXNbaV0pOwogIAkJfQogIAkKICAJCXBhcmFtZXRlcnMucHV0 KE9iamVjdFVwZGF0ZS5QQVJBTV9MQU5HVUFHRV9QUklWSUxFR0VTLCBwcml2 U2V0KTsKISAJICAgICAgICAKICAJCQogIAkJLy8gR2V0IGFsbCB0aGUgc2Vs ZWN0ZWQgaXRlbXMgcwogIAkJCi0tLSAxMzE5LDEzMzIgLS0tLQogICAgICAg ICAgICAgIAkJcHJpdlNldC5wdXQoZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldLCBl ZmZlY3RlZFByaXZlbGVnZXNbaV0pOwogIAkJfQogIAkKKyAJCUhhc2h0YWJs ZSB3aXRoR3JhbnRQcml2U2V0ID0gbmV3IEhhc2h0YWJsZSgpOworIAkJCisg CQlmb3IgKGludCBpID0gMDsgaSA8IGVmZmVjdGVkV2l0aEdyYW50UHJpdmls ZWdlcy5sZW5ndGg7IGkrKykgeworIAkJCXdpdGhHcmFudFByaXZTZXQucHV0 KGVmZmVjdGVkV2l0aEdyYW50UHJpdmlsZWdlc1tpXSwgZWZmZWN0ZWRXaXRo R3JhbnRQcml2aWxlZ2VzW2ldKTsKKyAJCX0KKyAJCQogIAkJcGFyYW1ldGVy cy5wdXQoT2JqZWN0VXBkYXRlLlBBUkFNX0xBTkdVQUdFX1BSSVZJTEVHRVMs IHByaXZTZXQpOwohIAkJcGFyYW1ldGVycy5wdXQoT2JqZWN0VXBkYXRlLlBB UkFNX0xBTkdVQUdFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCwgd2l0aEdyYW50 UHJpdlNldCk7ICAKICAJCQogIAkJLy8gR2V0IGFsbCB0aGUgc2VsZWN0ZWQg aXRlbXMgcwogIAkJCioqKioqKioqKioqKioqKgoqKiogMTI4NywxMjk0ICoq KioKICAJCiAgCWlmIChmdW5jUHJpdkNoYW5nZWQpIHsKICAJCQohIAkJU3Ry aW5nW10gZWZmZWN0ZWRQcml2ZWxlZ2VzID0ganBGdW5jdGlvblByaXYuZ2V0 U2VsZWN0ZWRCb3hlcygpOwohIAkJCiAgCQkKICAJCS8vIENyZWF0ZSBuZXcg c2V0IGluY2x1ZGluZyB0aGUgcHJpdmlsZWdlcyB0aGF0IHdlcmUgZWZmZWN0 ZWQKICAgICAgICAgIAkKLS0tIDEzNDUsMTM1MiAtLS0tCiAgCQogIAlpZiAo ZnVuY1ByaXZDaGFuZ2VkKSB7CiAgCQkKISAJCVN0cmluZ1tdIGVmZmVjdGVk UHJpdmVsZWdlcyA9IGpwRnVuY3Rpb25Qcml2LmdldFByaW1hcnlPbmx5U2Vs ZWN0ZWRCb3hlcygpOwohIAkJU3RyaW5nW10gZWZmZWN0ZWRXaXRoR3JhbnRQ cml2aWxlZ2VzID0ganBGdW5jdGlvblByaXYuZ2V0U2VsZWN0ZWRTZWNvbmRh cnlCb3hlcygpOwogIAkJCiAgCQkvLyBDcmVhdGUgbmV3IHNldCBpbmNsdWRp bmcgdGhlIHByaXZpbGVnZXMgdGhhdCB3ZXJlIGVmZmVjdGVkCiAgICAgICAg ICAJCioqKioqKioqKioqKioqKgoqKiogMTI5OCwxMzA1ICoqKioKICAgICAg ICAgICAgICAJCXByaXZTZXQucHV0KGVmZmVjdGVkUHJpdmVsZWdlc1tpXSwg ZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldKTsKICAJCX0KICAJCiAgCQlwYXJhbWV0 ZXJzLnB1dChPYmplY3RVcGRhdGUuUEFSQU1fRlVOQ1RJT05fUFJJVklMRUdF UywgcHJpdlNldCk7CiEgCSAgICAgICAgCiAgCQkKICAJCS8vIEdldCBhbGwg dGhlIHNlbGVjdGVkIGl0ZW1zIHMKICAJCQotLS0gMTM1NiwxMzcwIC0tLS0K ICAgICAgICAgICAgICAJCXByaXZTZXQucHV0KGVmZmVjdGVkUHJpdmVsZWdl c1tpXSwgZWZmZWN0ZWRQcml2ZWxlZ2VzW2ldKTsKICAJCX0KICAJCisgCQlI YXNodGFibGUgd2l0aEdyYW50UHJpdlNldCA9IG5ldyBIYXNodGFibGUoKTsK KyAJCQorIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBlZmZlY3RlZFdpdGhHcmFu dFByaXZpbGVnZXMubGVuZ3RoOyBpKyspIHsKKyAJCQl3aXRoR3JhbnRQcml2 U2V0LnB1dChlZmZlY3RlZFdpdGhHcmFudFByaXZpbGVnZXNbaV0sIGVmZmVj dGVkV2l0aEdyYW50UHJpdmlsZWdlc1tpXSk7CisgCQl9CisgCQkKICAJCXBh cmFtZXRlcnMucHV0KE9iamVjdFVwZGF0ZS5QQVJBTV9GVU5DVElPTl9QUklW SUxFR0VTLCBwcml2U2V0KTsKISAJCXBhcmFtZXRlcnMucHV0KE9iamVjdFVw ZGF0ZS5QQVJBTV9GVU5DVElPTl9QUklWSUxFR0VTX1dJVEhfR1JBTlQsIHdp dGhHcmFudFByaXZTZXQpOyAgCiEgCiAgCQkKICAJCS8vIEdldCBhbGwgdGhl IHNlbGVjdGVkIGl0ZW1zIHMKICAJCQoqKioqKioqKioqKioqKioKKioqIDEz MjMsMTM1NCAqKioqCiAgCQlqYkFwcGx5LnNldEVuYWJsZWQoZmFsc2UpOwog IAkJanRwT2JqZWN0cy5zZXRUaXRsZUF0KDAsIEFkbWluUmVzb3VyY2VzLmdl dFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVHRVNf VEFCTEVTKSk7CiAgICAgICAgICAgICAgICAgIGludFtdIGp1c3RBcHBsaWVk ID0ganBUYWJsZVByaXYuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7CiAgICAgICAg ICAgICAgICAgIGpwVGFibGVQcml2LnJlc2V0KCk7CiAgICAgICAgICAgICAg ICAgIGpwVGFibGVQcml2LnNldFNlbGVjdGVkQm94ZXMoanVzdEFwcGxpZWQs IHRydWUpOwogIAkJanRwT2JqZWN0cy5zZXRUaXRsZUF0KDEsIEFkbWluUmVz b3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BS SVZJTEVHRVNfVklFV1MpKTsKICAgICAgICAgICAgICAgICAganVzdEFwcGxp ZWQgPSBqcFZpZXdQcml2LmdldFNlbGVjdGVkSW5kZXhlcygpOwogICAgICAg ICAgICAgICAgICBqcFZpZXdQcml2LnJlc2V0KCk7CiAgICAgICAgICAgICAg ICAgIGpwVmlld1ByaXYuc2V0U2VsZWN0ZWRCb3hlcyhqdXN0QXBwbGllZCwg dHJ1ZSk7CiAgCQlqdHBPYmplY3RzLnNldFRpdGxlQXQoMiwgQWRtaW5SZXNv dXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJ VklMRUdFU19TRVFVRU5DRVMpKTsKICAgICAgICAgICAgICAgICAganVzdEFw cGxpZWQgPSBqcFNlcXVlbmNlc1ByaXYuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7 CiAgICAgICAgICAgICAgICAgIGpwU2VxdWVuY2VzUHJpdi5yZXNldCgpOwog ICAgICAgICAgICAgICAgICBqcFNlcXVlbmNlc1ByaXYuc2V0U2VsZWN0ZWRC b3hlcyhqdXN0QXBwbGllZCwgdHJ1ZSk7CiAgCQlqdHBPYmplY3RzLnNldFRp dGxlQXQoMywgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVzb3Vy Y2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19MQU5HVUFHRVMpKTsKICAgICAg ICAgICAgICAgICAganVzdEFwcGxpZWQgPSBqcExhbmd1YWdlc1ByaXYuZ2V0 U2VsZWN0ZWRJbmRleGVzKCk7CiAgICAgICAgICAgICAgICAgIGpwTGFuZ3Vh Z2VzUHJpdi5yZXNldCgpOwogICAgICAgICAgICAgICAgICBqcExhbmd1YWdl c1ByaXYuc2V0U2VsZWN0ZWRCb3hlcyhqdXN0QXBwbGllZCwgdHJ1ZSk7CiAg CQlqdHBPYmplY3RzLnNldFRpdGxlQXQoNCwgQWRtaW5SZXNvdXJjZXMuZ2V0 U3RyaW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19G VU5DVElPTlMpKTsKICAgICAgICAgICAgICAgICAganVzdEFwcGxpZWQgPSBq cEZ1bmN0aW9uUHJpdi5nZXRTZWxlY3RlZEluZGV4ZXMoKTsKISAgICAgICAg ICAgICAgICAganBGdW5jdGlvblByaXYucmVzZXQoKTsKICAgICAgICAgICAg ICAgICAganBGdW5jdGlvblByaXYuc2V0U2VsZWN0ZWRCb3hlcyhqdXN0QXBw bGllZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgIGpwRGF0YWJhc2Uuc2V0 Qm9yZGVyKG5ldyBqYXZheC5zd2luZy5ib3JkZXIuVGl0bGVkQm9yZGVyKEFk bWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFO QUdFX1BSSVZJTEVHRVNfREFUQUJBU0UpKSk7CiAgICAgICAgICAgICAgICAg IGp1c3RBcHBsaWVkID0ganBEYXRhYmFzZVByaXYuZ2V0U2VsZWN0ZWRJbmRl eGVzKCk7CiEgICAgICAgICAgICAgICAgIGpwRGF0YWJhc2VQcml2LnJlc2V0 KCk7CiAgICAgICAgICAgICAgICAgIGpwRGF0YWJhc2VQcml2LnNldFNlbGVj dGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUpOwogICAgICAgICAgICAgICAg ICBqcFNjaGVtYS5zZXRCb3JkZXIobmV3IGphdmF4LnN3aW5nLmJvcmRlci5U aXRsZWRCb3JkZXIoQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWluUmVz b3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19TQ0hFTUEpKSk7CiAgICAg ICAgICAgICAgICAgIGp1c3RBcHBsaWVkID0ganBTY2hlbWFQcml2LmdldFNl bGVjdGVkSW5kZXhlcygpOwohICAgICAgICAgICAgICAgICBqcFNjaGVtYVBy aXYucmVzZXQoKTsKICAgICAgICAgICAgICAgICAganBTY2hlbWFQcml2LnNl dFNlbGVjdGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUpOwogICAgICAgICAg ICAgICAgICAKICAJfSBjYXRjaCAoT2JqZWN0VXBkYXRlRXhjZXB0aW9uIGUp IHsKICAJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0tLSAxMzg4LDE0MzMgLS0t LQogIAkJamJBcHBseS5zZXRFbmFibGVkKGZhbHNlKTsKICAJCWp0cE9iamVj dHMuc2V0VGl0bGVBdCgwLCBBZG1pblJlc291cmNlcy5nZXRTdHJpbmcoQWRt aW5SZXNvdXJjZXMuRExHX01BTkFHRV9QUklWSUxFR0VTX1RBQkxFUykpOwog ICAgICAgICAgICAgICAgICBpbnRbXSBqdXN0QXBwbGllZCA9IGpwVGFibGVQ cml2LmdldFNlbGVjdGVkSW5kZXhlcygpOworIAkJCQlpbnRbXSBqdXN0QXBw bGllZE9wdGlvbnMgPSBqcFRhYmxlUHJpdi5nZXRTZWxlY3RlZFNlY29uZGFy eUluZGV4ZXMoKTsKICAgICAgICAgICAgICAgICAganBUYWJsZVByaXYucmVz ZXQoKTsKICAgICAgICAgICAgICAgICAganBUYWJsZVByaXYuc2V0U2VsZWN0 ZWRCb3hlcyhqdXN0QXBwbGllZCwgdHJ1ZSk7CisgCQkJCWpwVGFibGVQcml2 LnNldFNlbGVjdGVkU2Vjb25kYXJ5Qm94ZXMoanVzdEFwcGxpZWRPcHRpb25z LCB0cnVlKTsKICAJCWp0cE9iamVjdHMuc2V0VGl0bGVBdCgxLCBBZG1pblJl c291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFHRV9Q UklWSUxFR0VTX1ZJRVdTKSk7CiAgICAgICAgICAgICAgICAgIGp1c3RBcHBs aWVkID0ganBWaWV3UHJpdi5nZXRTZWxlY3RlZEluZGV4ZXMoKTsKKyAJCQkJ anVzdEFwcGxpZWRPcHRpb25zID0ganBWaWV3UHJpdi5nZXRTZWxlY3RlZFNl Y29uZGFyeUluZGV4ZXMoKTsKICAgICAgICAgICAgICAgICAganBWaWV3UHJp di5yZXNldCgpOwogICAgICAgICAgICAgICAgICBqcFZpZXdQcml2LnNldFNl bGVjdGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUpOworIAkJCQlqcFZpZXdQ cml2LnNldFNlbGVjdGVkU2Vjb25kYXJ5Qm94ZXMoanVzdEFwcGxpZWRPcHRp b25zLCB0cnVlKTsKICAJCWp0cE9iamVjdHMuc2V0VGl0bGVBdCgyLCBBZG1p blJlc291cmNlcy5nZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuRExHX01BTkFH RV9QUklWSUxFR0VTX1NFUVVFTkNFUykpOwogICAgICAgICAgICAgICAgICBq dXN0QXBwbGllZCA9IGpwU2VxdWVuY2VzUHJpdi5nZXRTZWxlY3RlZEluZGV4 ZXMoKTsKKyAJCQkJanVzdEFwcGxpZWRPcHRpb25zID0ganBTZXF1ZW5jZXNQ cml2LmdldFNlbGVjdGVkU2Vjb25kYXJ5SW5kZXhlcygpOwogICAgICAgICAg ICAgICAgICBqcFNlcXVlbmNlc1ByaXYucmVzZXQoKTsKICAgICAgICAgICAg ICAgICAganBTZXF1ZW5jZXNQcml2LnNldFNlbGVjdGVkQm94ZXMoanVzdEFw cGxpZWQsIHRydWUpOworIAkJCQlqcFNlcXVlbmNlc1ByaXYuc2V0U2VsZWN0 ZWRTZWNvbmRhcnlCb3hlcyhqdXN0QXBwbGllZE9wdGlvbnMsIHRydWUpOwog IAkJanRwT2JqZWN0cy5zZXRUaXRsZUF0KDMsIEFkbWluUmVzb3VyY2VzLmdl dFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFOQUdFX1BSSVZJTEVHRVNf TEFOR1VBR0VTKSk7CiAgICAgICAgICAgICAgICAgIGp1c3RBcHBsaWVkID0g anBMYW5ndWFnZXNQcml2LmdldFNlbGVjdGVkSW5kZXhlcygpOworIAkJCQlq dXN0QXBwbGllZE9wdGlvbnMgPSBqcExhbmd1YWdlc1ByaXYuZ2V0U2VsZWN0 ZWRTZWNvbmRhcnlJbmRleGVzKCk7CiAgICAgICAgICAgICAgICAgIGpwTGFu Z3VhZ2VzUHJpdi5yZXNldCgpOwogICAgICAgICAgICAgICAgICBqcExhbmd1 YWdlc1ByaXYuc2V0U2VsZWN0ZWRCb3hlcyhqdXN0QXBwbGllZCwgdHJ1ZSk7 CisgCQkJCWpwTGFuZ3VhZ2VzUHJpdi5zZXRTZWxlY3RlZFNlY29uZGFyeUJv eGVzKGp1c3RBcHBsaWVkT3B0aW9ucywgdHJ1ZSk7CiAgCQlqdHBPYmplY3Rz LnNldFRpdGxlQXQoNCwgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFkbWlu UmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19GVU5DVElPTlMpKTsK ICAgICAgICAgICAgICAgICAganVzdEFwcGxpZWQgPSBqcEZ1bmN0aW9uUHJp di5nZXRTZWxlY3RlZEluZGV4ZXMoKTsKISAgICAgICAgICAgICAgICAganVz dEFwcGxpZWRPcHRpb25zID0ganBGdW5jdGlvblByaXYuZ2V0U2VsZWN0ZWRT ZWNvbmRhcnlJbmRleGVzKCk7CiEgCQkJCWpwRnVuY3Rpb25Qcml2LnJlc2V0 KCk7CiAgICAgICAgICAgICAgICAgIGpwRnVuY3Rpb25Qcml2LnNldFNlbGVj dGVkQm94ZXMoanVzdEFwcGxpZWQsIHRydWUpOworIAkJCQlqcEZ1bmN0aW9u UHJpdi5zZXRTZWxlY3RlZFNlY29uZGFyeUJveGVzKGp1c3RBcHBsaWVkT3B0 aW9ucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgIGpwRGF0YWJhc2Uuc2V0 Qm9yZGVyKG5ldyBqYXZheC5zd2luZy5ib3JkZXIuVGl0bGVkQm9yZGVyKEFk bWluUmVzb3VyY2VzLmdldFN0cmluZyhBZG1pblJlc291cmNlcy5ETEdfTUFO QUdFX1BSSVZJTEVHRVNfREFUQUJBU0UpKSk7CiAgICAgICAgICAgICAgICAg IGp1c3RBcHBsaWVkID0ganBEYXRhYmFzZVByaXYuZ2V0U2VsZWN0ZWRJbmRl eGVzKCk7CiEgICAgICAgICAgICAgICAgIGp1c3RBcHBsaWVkT3B0aW9ucyA9 IGpwRGF0YWJhc2VQcml2LmdldFNlbGVjdGVkU2Vjb25kYXJ5SW5kZXhlcygp OwohIAkJCQlqcERhdGFiYXNlUHJpdi5yZXNldCgpOwogICAgICAgICAgICAg ICAgICBqcERhdGFiYXNlUHJpdi5zZXRTZWxlY3RlZEJveGVzKGp1c3RBcHBs aWVkLCB0cnVlKTsKKyAJCQkJanBEYXRhYmFzZVByaXYuc2V0U2VsZWN0ZWRT ZWNvbmRhcnlCb3hlcyhqdXN0QXBwbGllZE9wdGlvbnMsIHRydWUpOwogICAg ICAgICAgICAgICAgICBqcFNjaGVtYS5zZXRCb3JkZXIobmV3IGphdmF4LnN3 aW5nLmJvcmRlci5UaXRsZWRCb3JkZXIoQWRtaW5SZXNvdXJjZXMuZ2V0U3Ry aW5nKEFkbWluUmVzb3VyY2VzLkRMR19NQU5BR0VfUFJJVklMRUdFU19TQ0hF TUEpKSk7CiAgICAgICAgICAgICAgICAgIGp1c3RBcHBsaWVkID0ganBTY2hl bWFQcml2LmdldFNlbGVjdGVkSW5kZXhlcygpOwohICAgICAgICAgICAgICAg ICBqdXN0QXBwbGllZE9wdGlvbnMgPSBqcFNjaGVtYVByaXYuZ2V0U2VsZWN0 ZWRTZWNvbmRhcnlJbmRleGVzKCk7CiEgCQkJCWpwU2NoZW1hUHJpdi5yZXNl dCgpOwogICAgICAgICAgICAgICAgICBqcFNjaGVtYVByaXYuc2V0U2VsZWN0 ZWRCb3hlcyhqdXN0QXBwbGllZCwgdHJ1ZSk7CisgCQkJCWpwU2NoZW1hUHJp di5zZXRTZWxlY3RlZFNlY29uZGFyeUJveGVzKGp1c3RBcHBsaWVkT3B0aW9u cywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgIAogIAl9IGNhdGNoIChPYmpl Y3RVcGRhdGVFeGNlcHRpb24gZSkgewogIAkJZS5wcmludFN0YWNrVHJhY2Uo KTsKKioqKioqKioqKioqKioqCioqKiAxMzg2LDEzOTEgKioqKgotLS0gMTQ2 NSwxNDcyIC0tLS0KICAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZnVu Y09wdGlvbnM7CiAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGxhbmdP cHRpb25zOwogICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBvcHRpb25z OworIAkKKyAJcHJpdmF0ZSBTdHJpbmcgZ3JhbnRPcHRpb25TdHJpbmcgPSAi IjsKICAKICAgICAgLy8gVmFyaWFibGVzIGRlY2xhcmF0aW9uIC0gZG8gbm90 IG1vZGlmeS8vR0VOLUJFR0lOOnZhcmlhYmxlcwogICAgICBwcml2YXRlIGph dmF4LnN3aW5nLkpCdXR0b24gamJBcHBseTsKKioqKioqKioqKioqKioqCioq KiAxNDAwLDE0MTMgKioqKgogICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpM aXN0IGpsVmlld3M7CiAgICAgIHByaXZhdGUgamF2YXguc3dpbmcuSlBhbmVs IGpwQnV0dG9uczsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KUGFuZWwg anBEYXRhYmFzZTsKISAgICAgcHJpdmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRt aW4uQ2hlY2tCb3hQYW5lbCBqcERhdGFiYXNlUHJpdjsKISAgICAgcHJpdmF0 ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4uQ2hlY2tCb3hQYW5lbCBqcEZ1bmN0 aW9uUHJpdjsKISAgICAgcHJpdmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4u Q2hlY2tCb3hQYW5lbCBqcExhbmd1YWdlc1ByaXY7CiAgICAgIHByaXZhdGUg amF2YXguc3dpbmcuSlBhbmVsIGpwU2NoZW1hOwohICAgICBwcml2YXRlIGNv bS5yZWRoYXQucmhkYi5hZG1pbi5DaGVja0JveFBhbmVsIGpwU2NoZW1hUHJp djsKISAgICAgcHJpdmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4uQ2hlY2tC b3hQYW5lbCBqcFNlcXVlbmNlc1ByaXY7CiEgICAgIHByaXZhdGUgY29tLnJl ZGhhdC5yaGRiLmFkbWluLkNoZWNrQm94UGFuZWwganBUYWJsZVByaXY7CiEg ICAgIHByaXZhdGUgY29tLnJlZGhhdC5yaGRiLmFkbWluLkNoZWNrQm94UGFu ZWwganBWaWV3UHJpdjsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Ny b2xsUGFuZSBqc2NGdW5jdGlvbnM7CiAgICAgIHByaXZhdGUgamF2YXguc3dp bmcuSlNjcm9sbFBhbmUganNjTGFuZ3VhZ2VzOwogICAgICBwcml2YXRlIGph dmF4LnN3aW5nLkpTY3JvbGxQYW5lIGpzY1NlcXVlbmNlczsKLS0tIDE0ODEs MTQ5NCAtLS0tCiAgICAgIHByaXZhdGUgamF2YXguc3dpbmcuSkxpc3QgamxW aWV3czsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KUGFuZWwganBCdXR0 b25zOwogICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpQYW5lbCBqcERhdGFi YXNlOwohICAgICBwcml2YXRlIGNvbS5yZWRoYXQucmhkYi5hZG1pbi5Qcml2 aWxlZ2VzQ2hlY2tCb3hQYW5lbCBqcERhdGFiYXNlUHJpdjsKISAgICAgcHJp dmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4uUHJpdmlsZWdlc0NoZWNrQm94 UGFuZWwganBGdW5jdGlvblByaXY7CiEgICAgIHByaXZhdGUgY29tLnJlZGhh dC5yaGRiLmFkbWluLlByaXZpbGVnZXNDaGVja0JveFBhbmVsIGpwTGFuZ3Vh Z2VzUHJpdjsKICAgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KUGFuZWwganBT Y2hlbWE7CiEgICAgIHByaXZhdGUgY29tLnJlZGhhdC5yaGRiLmFkbWluLlBy aXZpbGVnZXNDaGVja0JveFBhbmVsIGpwU2NoZW1hUHJpdjsKISAgICAgcHJp dmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4uUHJpdmlsZWdlc0NoZWNrQm94 UGFuZWwganBTZXF1ZW5jZXNQcml2OwohICAgICBwcml2YXRlIGNvbS5yZWRo YXQucmhkYi5hZG1pbi5Qcml2aWxlZ2VzQ2hlY2tCb3hQYW5lbCBqcFRhYmxl UHJpdjsKISAgICAgcHJpdmF0ZSBjb20ucmVkaGF0LnJoZGIuYWRtaW4uUHJp dmlsZWdlc0NoZWNrQm94UGFuZWwganBWaWV3UHJpdjsKICAgICAgcHJpdmF0 ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBqc2NGdW5jdGlvbnM7CiAgICAg IHByaXZhdGUgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUganNjTGFuZ3VhZ2Vz OwogICAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lIGpzY1Nl cXVlbmNlczsKSW5kZXg6IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vT2Jq ZWN0VXBkYXRlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9yaGRiL3NyYy9yaGRiL2d1aXRvb2xzL3JoZGItYWRtaW4vc3Jj L2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9PYmplY3RVcGRhdGUuamF2YSx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLWMgLXIxLjIgT2JqZWN0VXBk YXRlLmphdmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vT2JqZWN0 VXBkYXRlLmphdmEJNCBNYXkgMjAwNCAxNjo1NzoxNSAtMDAwMAkxLjIKLS0t IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vT2JqZWN0VXBkYXRlLmphdmEJ OSBKdW4gMjAwNCAwNTozOToyMyAtMDAwMAoqKioqKioqKioqKioqKioKKioq IDIyMCwyMzEgKioqKgotLS0gMjIwLDIzOCAtLS0tCiAgCXB1YmxpYyBzdGF0 aWMgZmluYWwgU3RyaW5nIFBBUkFNX1BVQkxJQyA9ICJwdWJsaWMiOwogIAkK ICAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fREFUQUJBU0Vf UFJJVklMRUdFUyA9ICJkYXRhYmFzZS5wcml2aWxlZ2VzIjsKKyAJcHVibGlj IHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fREFUQUJBU0VfUFJJVklMRUdF U19XSVRIX0dSQU5UID0gImRhdGFiYXNlLnByaXZpbGVnZXMud2l0aC5ncmFu dCI7CiAgCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1NDSEVN QV9QUklWSUxFR0VTID0gInNjaGVtYS5wcml2aWxlZ2VzIjsKKyAJcHVibGlj IHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fU0NIRU1BX1BSSVZJTEVHRVNf V0lUSF9HUkFOVCA9ICJzY2hlbWEucHJpdmlsZWdlcy53aXRoLmdyYW50IjsK ICAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fVEFCTEVfUFJJ VklMRUdFUyA9ICJ0YWJsZS5wcml2aWxlZ2VzIjsKKyAJcHVibGljIHN0YXRp YyBmaW5hbCBTdHJpbmcgUEFSQU1fVEFCTEVfUFJJVklMRUdFU19XSVRIX0dS QU5UID0gInRhYmxlLnByaXZpbGVnZXMud2l0aC5ncmFudCI7CiAgCXB1Ymxp YyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNX1ZJRVdfUFJJVklMRUdFUyA9 ICJ2aWV3LnByaXZpbGVnZXMiOworIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBQQVJBTV9WSUVXX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCA9ICJ2aWV3 LnByaXZpbGVnZXMud2l0aC5ncmFudCI7CiAgCXB1YmxpYyBzdGF0aWMgZmlu YWwgU3RyaW5nIFBBUkFNX1NFUVVFTkNFX1BSSVZJTEVHRVMgPSAic2VxdWVu Y2UucHJpdmlsZWdlcyI7CisgCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n IFBBUkFNX1NFUVVFTkNFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCA9ICJzZXF1 ZW5jZS5wcml2aWxlZ2VzLndpdGguZ3JhbnQiOwogIAlwdWJsaWMgc3RhdGlj IGZpbmFsIFN0cmluZyBQQVJBTV9MQU5HVUFHRV9QUklWSUxFR0VTID0gImxh bmd1YWdlLnByaXZpbGVnZXMiOworIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBQQVJBTV9MQU5HVUFHRV9QUklWSUxFR0VTX1dJVEhfR1JBTlQgPSAi bGFuZ3VhZ2UucHJpdmlsZWdlcy53aXRoLmdyYW50IjsKICAJcHVibGljIHN0 YXRpYyBmaW5hbCBTdHJpbmcgUEFSQU1fRlVOQ1RJT05fUFJJVklMRUdFUyA9 ICJmdW5jdGlvbi5wcml2aWxlZ2VzIjsKKyAJcHVibGljIHN0YXRpYyBmaW5h bCBTdHJpbmcgUEFSQU1fRlVOQ1RJT05fUFJJVklMRUdFU19XSVRIX0dSQU5U ID0gImZ1bmN0aW9uLnByaXZpbGVnZXMud2l0aC5ncmFudCI7CiAgCQogIAlw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVJBTV9SVUxFX05BTUUgPSAi cnVsZS5uYW1lIjsKICAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFS QU1fUkVMQVRJT05fTkFNRSA9ICJyZWxhdGlvbi5uYW1lIjsKSW5kZXg6IHNy Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vUHJpdmlsZWdlc1VwZGF0ZS5qYXZh Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcmhkYi9z cmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVkaGF0L3Jo ZGIvYWRtaW4vUHJpdmlsZWdlc1VwZGF0ZS5qYXZhLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjEuMS4xCmRpZmYgLWMgLXIxLjEuMS4xIFByaXZpbGVnZXNV cGRhdGUuamF2YQoqKiogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9Qcml2 aWxlZ2VzVXBkYXRlLmphdmEJMjEgTm92IDIwMDMgMTg6MzA6MjMgLTAwMDAJ MS4xLjEuMQotLS0gc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9Qcml2aWxl Z2VzVXBkYXRlLmphdmEJOSBKdW4gMjAwNCAwNTozOToyNCAtMDAwMAoqKioq KioqKioqKioqKioKKioqIDEsNSAqKioqCiAgLyoqCiEgICogQ29weXJpZ2h0 IChjKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmlidXRl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UuCiAgICoKLS0tIDEsNSAtLS0tCiAgLyoqCiEgICogQ29w eXJpZ2h0IChjKSAyMDAzLCAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkg cmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKKioqKioqKioqKioqKioq CioqKiAxNDksMTU1ICoqKioKICAJCS8vIHRoYXQgdGhlIGRpYWxvZyBhbHdh eXMgZ2l2ZXMgdGhlIG5vbi1vcHRpb25hbCBwYXJhbWV0ZXJzIGJlZm9yZSBp dHMgCiAgCQkvLyB0b28gbGF0ZS4KICAKISAJCVN0cmluZ1tdIHJlcXVpcmVk UGFyYW1ldGVycyA9IHtQQVJBTV9DTFVTVEVSX05BTUUsIFBBUkFNX0RCX05B TUUsIFBBUkFNX0ZVTkNUSU9OUywgUEFSQU1fU0NIRU1BX05BTUUsIFBBUkFN X1VTRVJTLCBQQVJBTV9HUk9VUFMsIFBBUkFNX0ZVTkNUSU9OX1BSSVZJTEVH RVN9OwogIAkJU3RyaW5nW10gb3B0aW9uYWxQYXJhbWV0ZXJzID0ge1BBUkFN X1BVQkxJQ307CiAgCQlTdHJpbmcgdXBkYXRlU3RyaW5nID0gIiI7CiAgCQlT dHJpbmcgZnVuY3Rpb25MaXN0ID0gIiI7Ci0tLSAxNDksMTU1IC0tLS0KICAJ CS8vIHRoYXQgdGhlIGRpYWxvZyBhbHdheXMgZ2l2ZXMgdGhlIG5vbi1vcHRp b25hbCBwYXJhbWV0ZXJzIGJlZm9yZSBpdHMgCiAgCQkvLyB0b28gbGF0ZS4K ICAKISAJCVN0cmluZ1tdIHJlcXVpcmVkUGFyYW1ldGVycyA9IHtQQVJBTV9D TFVTVEVSX05BTUUsIFBBUkFNX0RCX05BTUUsIFBBUkFNX0ZVTkNUSU9OUywg UEFSQU1fU0NIRU1BX05BTUUsIFBBUkFNX1VTRVJTLCBQQVJBTV9HUk9VUFMs IFBBUkFNX0ZVTkNUSU9OX1BSSVZJTEVHRVMsIFBBUkFNX0ZVTkNUSU9OX1BS SVZJTEVHRVNfV0lUSF9HUkFOVCB9OwogIAkJU3RyaW5nW10gb3B0aW9uYWxQ YXJhbWV0ZXJzID0ge1BBUkFNX1BVQkxJQ307CiAgCQlTdHJpbmcgdXBkYXRl U3RyaW5nID0gIiI7CiAgCQlTdHJpbmcgZnVuY3Rpb25MaXN0ID0gIiI7Cioq KioqKioqKioqKioqKgoqKiogMjM1LDI0MCAqKioqCi0tLSAyMzUsMjYwIC0t LS0KICAJCQkKICAJCX0KICAJCQorIAkJT2JqZWN0W10gcHJpdmlsZWdlc1dp dGhHcmFudCA9ICgoSGFzaHRhYmxlKSBwYXJhbWV0ZXJzLmdldChQQVJBTV9G VU5DVElPTl9QUklWSUxFR0VTX1dJVEhfR1JBTlQpKS52YWx1ZXMoKS50b0Fy cmF5KCk7CisgCisgCQlpZiAocHJpdmlsZWdlc1dpdGhHcmFudC5sZW5ndGgg IT0gMCkgeworIAkJCisgCQkJLy8gQWRkIGdyYW50IGNhbGwKKyAJCQl1cGRh dGVTdHJpbmcgKz0gIkdSQU5UICI7CisgCQkKKyAJCQlmb3IgKGludCBpID0g MDsgaSA8IHByaXZpbGVnZXNXaXRoR3JhbnQubGVuZ3RoOyBpKyspIHsKKyAJ CQorIAkJCQl1cGRhdGVTdHJpbmcgKz0gcHJpdmlsZWdlc1dpdGhHcmFudFtp XTsKKyAJCQkKKyAJCQkJaWYgKGkgPCBwcml2aWxlZ2VzV2l0aEdyYW50Lmxl bmd0aCAtIDEpCisgCQkJCQl1cGRhdGVTdHJpbmcgKz0gIiwgIjsKKyAJCQkJ CQorIAkJCX0KKyAJCQorIAkJCXVwZGF0ZVN0cmluZyArPSAiIE9OIEZVTkNU SU9OICIgKyBmdW5jdGlvbkxpc3QgKyAiIFRPICIgKyB1c2VyTGlzdCArICIg V0lUSCBHUkFOVCBPUFRJT047ICI7CisgCQkJCisgCQl9CisgCQkKICAJCXJl dHVybiB1cGRhdGVTdHJpbmc7CiAgCQkJCiAgCQkJCioqKioqKioqKioqKioq KgoqKiogMzQzLDM0OCAqKioqCi0tLSAzNjMsMzg4IC0tLS0KICAJCQkKICAJ CX0KICAJCQorIAkJT2JqZWN0W10gcHJpdmlsZWdlc1dpdGhHcmFudCA9ICgo SGFzaHRhYmxlKSBwYXJhbWV0ZXJzLmdldChQQVJBTV9MQU5HVUFHRV9QUklW SUxFR0VTX1dJVEhfR1JBTlQpKS52YWx1ZXMoKS50b0FycmF5KCk7CisgCQkK KyAJCWlmIChwcml2aWxlZ2VzV2l0aEdyYW50Lmxlbmd0aCAhPSAwKSB7Cisg CQkKKyAJCQkvLyBBZGQgZ3JhbnQgY2FsbAorIAkJCXVwZGF0ZVN0cmluZyAr PSAiR1JBTlQgIjsKKyAJCQorIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJp dmlsZWdlc1dpdGhHcmFudC5sZW5ndGg7IGkrKykgeworIAkJCisgCQkJCXVw ZGF0ZVN0cmluZyArPSBwcml2aWxlZ2VzV2l0aEdyYW50W2ldOworIAkJCQor IAkJCQlpZiAoaSA8IHByaXZpbGVnZXNXaXRoR3JhbnQubGVuZ3RoIC0gMSkK KyAJCQkJCXVwZGF0ZVN0cmluZyArPSAiLCAiOworIAkJCQkJCisgCQkJfQor IAkJCisgCQkJdXBkYXRlU3RyaW5nICs9ICIgT04gTEFOR1VBR0UgIiArIGxh bmd1YWdlTGlzdCArICIgVE8gIiArIHVzZXJMaXN0ICsgIiBXSVRIIEdSQU5U IE9QVElPTjsgIjsKKyAJCQkKKyAJCX0KKyAJCQogIAkJcmV0dXJuIHVwZGF0 ZVN0cmluZzsKICAJCQogIAl9CioqKioqKioqKioqKioqKgoqKiogMzYyLDM2 OCAqKioqCiAgCQkvLyB0aGF0IHRoZSBkaWFsb2cgYWx3YXlzIGdpdmVzIHRo ZSBub24tb3B0aW9uYWwgcGFyYW1ldGVycyBiZWZvcmUgaXRzIAogIAkJLy8g dG9vIGxhdGUuCiAgCiEgCQlTdHJpbmdbXSByZXF1aXJlZFBhcmFtZXRlcnMg PSB7UEFSQU1fQ0xVU1RFUl9OQU1FLCBQQVJBTV9EQl9OQU1FLCBQQVJBTV9W SUVXUywgUEFSQU1fU0NIRU1BX05BTUUsIFBBUkFNX1VTRVJTLCBQQVJBTV9H Uk9VUFMsIFBBUkFNX1ZJRVdfUFJJVklMRUdFU307CiAgCQlTdHJpbmdbXSBv cHRpb25hbFBhcmFtZXRlcnMgPSB7UEFSQU1fUFVCTElDfTsKICAJCVN0cmlu ZyB1cGRhdGVTdHJpbmcgPSAiIjsKICAJCVN0cmluZyB2aWV3TGlzdCA9ICIi OwotLS0gNDAyLDQwOCAtLS0tCiAgCQkvLyB0aGF0IHRoZSBkaWFsb2cgYWx3 YXlzIGdpdmVzIHRoZSBub24tb3B0aW9uYWwgcGFyYW1ldGVycyBiZWZvcmUg aXRzIAogIAkJLy8gdG9vIGxhdGUuCiAgCiEgCQlTdHJpbmdbXSByZXF1aXJl ZFBhcmFtZXRlcnMgPSB7UEFSQU1fQ0xVU1RFUl9OQU1FLCBQQVJBTV9EQl9O QU1FLCBQQVJBTV9WSUVXUywgUEFSQU1fU0NIRU1BX05BTUUsIFBBUkFNX1VT RVJTLCBQQVJBTV9HUk9VUFMsIFBBUkFNX1ZJRVdfUFJJVklMRUdFUywgUEFS QU1fVklFV19QUklWSUxFR0VTX1dJVEhfR1JBTlQgfTsKICAJCVN0cmluZ1td IG9wdGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJMSUN9OwogIAkJU3Ry aW5nIHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5nIHZpZXdMaXN0ID0g IiI7CioqKioqKioqKioqKioqKgoqKiogNDUxLDQ1NyAqKioqCiAgCQkJCiAg CQl9CiAgCQkKISAJCXJldHVybiB1cGRhdGVTdHJpbmc7CQkKICAJfQogIAog IAotLS0gNDkxLDUxNyAtLS0tCiAgCQkJCiAgCQl9CiAgCQkKISAJCU9iamVj dFtdIHByaXZpbGVnZXNXaXRoR3JhbnQgPSAoKEhhc2h0YWJsZSkgcGFyYW1l dGVycy5nZXQoUEFSQU1fVklFV19QUklWSUxFR0VTX1dJVEhfR1JBTlQpKS52 YWx1ZXMoKS50b0FycmF5KCk7CiEgCQkKISAJCWlmIChwcml2aWxlZ2VzV2l0 aEdyYW50Lmxlbmd0aCAhPSAwKSB7CiEgCQkKISAJCQkvLyBBZGQgZ3JhbnQg Y2FsbAohIAkJCXVwZGF0ZVN0cmluZyArPSAiR1JBTlQgIjsKISAJCQohIAkJ CWZvciAoaW50IGkgPSAwOyBpIDwgcHJpdmlsZWdlc1dpdGhHcmFudC5sZW5n dGg7IGkrKykgewohIAkJCiEgCQkJCXVwZGF0ZVN0cmluZyArPSBwcml2aWxl Z2VzV2l0aEdyYW50W2ldOwohIAkJCQohIAkJCQlpZiAoaSA8IHByaXZpbGVn ZXNXaXRoR3JhbnQubGVuZ3RoIC0gMSkKISAJCQkJCXVwZGF0ZVN0cmluZyAr PSAiLCAiOwohIAkJCQkJCiEgCQkJfQohIAkJCiEgCQkJdXBkYXRlU3RyaW5n ICs9ICIgT04gVEFCTEUgIiArIHZpZXdMaXN0ICsgIiBUTyAiICsgdXNlckxp c3QgKyAiIFdJVEggR1JBTlQgT1BUSU9OOyAiOwohIAkJCQohIAkJfQohIAkJ CiEgCQlyZXR1cm4gdXBkYXRlU3RyaW5nOwogIAl9CiAgCiAgCioqKioqKioq KioqKioqKgoqKiogNDY5LDQ3NSAqKioqCiAgCQkvLyB0aGF0IHRoZSBkaWFs b2cgYWx3YXlzIGdpdmVzIHRoZSBub24tb3B0aW9uYWwgcGFyYW1ldGVycyBi ZWZvcmUgaXRzIAogIAkJLy8gdG9vIGxhdGUuCiAgCiEgCQlTdHJpbmdbXSBy ZXF1aXJlZFBhcmFtZXRlcnMgPSB7UEFSQU1fQ0xVU1RFUl9OQU1FLCBQQVJB TV9EQl9OQU1FLCBQQVJBTV9TRVFVRU5DRVMsIFBBUkFNX1NDSEVNQV9OQU1F LCBQQVJBTV9VU0VSUywgUEFSQU1fR1JPVVBTLCBQQVJBTV9TRVFVRU5DRV9Q UklWSUxFR0VTfTsKICAJCVN0cmluZ1tdIG9wdGlvbmFsUGFyYW1ldGVycyA9 IHtQQVJBTV9QVUJMSUN9OwogIAkJU3RyaW5nIHVwZGF0ZVN0cmluZyA9ICIi OwogIAkJU3RyaW5nIHNlcXVlbmNlTGlzdCA9ICIiOwotLS0gNTI5LDUzNSAt LS0tCiAgCQkvLyB0aGF0IHRoZSBkaWFsb2cgYWx3YXlzIGdpdmVzIHRoZSBu b24tb3B0aW9uYWwgcGFyYW1ldGVycyBiZWZvcmUgaXRzIAogIAkJLy8gdG9v IGxhdGUuCiAgCiEgCQlTdHJpbmdbXSByZXF1aXJlZFBhcmFtZXRlcnMgPSB7 UEFSQU1fQ0xVU1RFUl9OQU1FLCBQQVJBTV9EQl9OQU1FLCBQQVJBTV9TRVFV RU5DRVMsIFBBUkFNX1NDSEVNQV9OQU1FLCBQQVJBTV9VU0VSUywgUEFSQU1f R1JPVVBTLCBQQVJBTV9TRVFVRU5DRV9QUklWSUxFR0VTLCBQQVJBTV9TRVFV RU5DRV9QUklWSUxFR0VTX1dJVEhfR1JBTlQgfTsKICAJCVN0cmluZ1tdIG9w dGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJMSUN9OwogIAkJU3RyaW5n IHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5nIHNlcXVlbmNlTGlzdCA9 ICIiOwoqKioqKioqKioqKioqKioKKioqIDU1NSw1NjEgKioqKgogIAkJCQog IAkJfQogIAohIAkJcmV0dXJuIHVwZGF0ZVN0cmluZzsJCQogIAl9CiAgCiAg CQotLS0gNjE1LDY0MSAtLS0tCiAgCQkJCiAgCQl9CiAgCiEgCQlPYmplY3Rb XSBwcml2aWxlZ2VzV2l0aEdyYW50ID0gKChIYXNodGFibGUpIHBhcmFtZXRl cnMuZ2V0KFBBUkFNX1NFUVVFTkNFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCkp LnZhbHVlcygpLnRvQXJyYXkoKTsKISAJCQohIAkJaWYgKHByaXZpbGVnZXNX aXRoR3JhbnQubGVuZ3RoICE9IDApIHsKISAJCQohIAkJCS8vIEFkZCBncmFu dCBjYWxsCiEgCQkJdXBkYXRlU3RyaW5nICs9ICJHUkFOVCAiOwohIAkJCiEg CQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcml2aWxlZ2VzV2l0aEdyYW50Lmxl bmd0aDsgaSsrKSB7CiEgCQkKISAJCQkJdXBkYXRlU3RyaW5nICs9IHByaXZp bGVnZXNXaXRoR3JhbnRbaV07CiEgCQkJCiEgCQkJCWlmIChpIDwgcHJpdmls ZWdlc1dpdGhHcmFudC5sZW5ndGggLSAxKQohIAkJCQkJdXBkYXRlU3RyaW5n ICs9ICIsICI7CiEgCQkJCQkKISAJCQl9CiEgCQkKISAJCQl1cGRhdGVTdHJp bmcgKz0gIiBPTiBUQUJMRSAiICsgc2VxdWVuY2VMaXN0ICsgIiBUTyAiICsg dXNlckxpc3QgKyAiIFdJVEggR1JBTlQgT1BUSU9OOyAiOwohIAkJCQohIAkJ fQohIAkJCiEgCQlyZXR1cm4gdXBkYXRlU3RyaW5nOwogIAl9CiAgCiAgCQoq KioqKioqKioqKioqKioKKioqIDU3Myw1NzkgKioqKgogIAkJLy8gdGhhdCB0 aGUgZGlhbG9nIGFsd2F5cyBnaXZlcyB0aGUgbm9uLW9wdGlvbmFsIHBhcmFt ZXRlcnMgYmVmb3JlIGl0cyAKICAJCS8vIHRvbyBsYXRlLgogIAohIAkJU3Ry aW5nW10gcmVxdWlyZWRQYXJhbWV0ZXJzID0ge1BBUkFNX0NMVVNURVJfTkFN RSwgUEFSQU1fREJfTkFNRSwgUEFSQU1fREFUQUJBU0VTLCBQQVJBTV9VU0VS UywgUEFSQU1fR1JPVVBTLCBQQVJBTV9EQVRBQkFTRV9QUklWSUxFR0VTfTsK ICAJCVN0cmluZ1tdIG9wdGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJM SUN9OwogIAkJU3RyaW5nIHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5n IGRhdGFiYXNlTGlzdCA9ICIiOwotLS0gNjUzLDY1OSAtLS0tCiAgCQkvLyB0 aGF0IHRoZSBkaWFsb2cgYWx3YXlzIGdpdmVzIHRoZSBub24tb3B0aW9uYWwg cGFyYW1ldGVycyBiZWZvcmUgaXRzIAogIAkJLy8gdG9vIGxhdGUuCiAgCiEg CQlTdHJpbmdbXSByZXF1aXJlZFBhcmFtZXRlcnMgPSB7UEFSQU1fQ0xVU1RF Ul9OQU1FLCBQQVJBTV9EQl9OQU1FLCBQQVJBTV9EQVRBQkFTRVMsIFBBUkFN X1VTRVJTLCBQQVJBTV9HUk9VUFMsIFBBUkFNX0RBVEFCQVNFX1BSSVZJTEVH RVMsIFBBUkFNX0RBVEFCQVNFX1BSSVZJTEVHRVNfV0lUSF9HUkFOVCB9Owog IAkJU3RyaW5nW10gb3B0aW9uYWxQYXJhbWV0ZXJzID0ge1BBUkFNX1BVQkxJ Q307CiAgCQlTdHJpbmcgdXBkYXRlU3RyaW5nID0gIiI7CiAgCQlTdHJpbmcg ZGF0YWJhc2VMaXN0ID0gIiI7CioqKioqKioqKioqKioqKgoqKiogNjU4LDY2 MyAqKioqCi0tLSA3MzgsNzYyIC0tLS0KICAJCQkKICAJCX0KICAJCQorIAkJ T2JqZWN0W10gcHJpdmlsZWdlc1dpdGhHcmFudCA9ICgoSGFzaHRhYmxlKSBw YXJhbWV0ZXJzLmdldChQQVJBTV9EQVRBQkFTRV9QUklWSUxFR0VTX1dJVEhf R1JBTlQpKS52YWx1ZXMoKS50b0FycmF5KCk7CisgCisgCQlpZiAocHJpdmls ZWdlc1dpdGhHcmFudC5sZW5ndGggIT0gMCkgeworIAkJCisgCQkJLy8gQWRk IGdyYW50IGNhbGwKKyAJCQl1cGRhdGVTdHJpbmcgKz0gIkdSQU5UICI7Cisg CQkKKyAJCQlmb3IgKGludCBpID0gMDsgaSA8IHByaXZpbGVnZXNXaXRoR3Jh bnQubGVuZ3RoOyBpKyspIHsKKyAJCQorIAkJCQl1cGRhdGVTdHJpbmcgKz0g cHJpdmlsZWdlc1dpdGhHcmFudFtpXTsKKyAJCQkKKyAJCQkJaWYgKGkgPCBw cml2aWxlZ2VzV2l0aEdyYW50Lmxlbmd0aCAtIDEpCisgCQkJCQl1cGRhdGVT dHJpbmcgKz0gIiwgIjsKKyAJCQkJCQorIAkJCX0KKyAJCQorIAkJCXVwZGF0 ZVN0cmluZyArPSAiIE9OIERBVEFCQVNFICIgKyBkYXRhYmFzZUxpc3QgKyAi IFRPICIgKyB1c2VyTGlzdCArICIgV0lUSCBHUkFOVCBPUFRJT047ICI7Cisg CQl9CisgCiAgCQlyZXR1cm4gdXBkYXRlU3RyaW5nOwkKICAJfQogIAkKKioq KioqKioqKioqKioqCioqKiA2NzUsNjgxICoqKioKICAJCS8vIHRoYXQgdGhl IGRpYWxvZyBhbHdheXMgZ2l2ZXMgdGhlIG5vbi1vcHRpb25hbCBwYXJhbWV0 ZXJzIGJlZm9yZSBpdHMgCiAgCQkvLyB0b28gbGF0ZS4KICAKISAJCVN0cmlu Z1tdIHJlcXVpcmVkUGFyYW1ldGVycyA9IHtQQVJBTV9DTFVTVEVSX05BTUUs IFBBUkFNX0RCX05BTUUsIFBBUkFNX1NDSEVNQVMsIFBBUkFNX1VTRVJTLCBQ QVJBTV9HUk9VUFMsIFBBUkFNX1NDSEVNQV9QUklWSUxFR0VTfTsKICAJCVN0 cmluZ1tdIG9wdGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJMSUN9Owog IAkJU3RyaW5nIHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5nIHNjaGVt YUxpc3QgPSAiIjsKLS0tIDc3NCw3ODAgLS0tLQogIAkJLy8gdGhhdCB0aGUg ZGlhbG9nIGFsd2F5cyBnaXZlcyB0aGUgbm9uLW9wdGlvbmFsIHBhcmFtZXRl cnMgYmVmb3JlIGl0cyAKICAJCS8vIHRvbyBsYXRlLgogIAohIAkJU3RyaW5n W10gcmVxdWlyZWRQYXJhbWV0ZXJzID0ge1BBUkFNX0NMVVNURVJfTkFNRSwg UEFSQU1fREJfTkFNRSwgUEFSQU1fU0NIRU1BUywgUEFSQU1fVVNFUlMsIFBB UkFNX0dST1VQUywgUEFSQU1fU0NIRU1BX1BSSVZJTEVHRVMsIFBBUkFNX1ND SEVNQV9QUklWSUxFR0VTX1dJVEhfR1JBTlQgfTsKICAJCVN0cmluZ1tdIG9w dGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJMSUN9OwogIAkJU3RyaW5n IHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5nIHNjaGVtYUxpc3QgPSAi IjsKKioqKioqKioqKioqKioqCioqKiA3NjAsNzY1ICoqKioKLS0tIDg1OSw4 ODQgLS0tLQogIAkJCQogIAkJfQogIAkJCisgCQlPYmplY3RbXSBwcml2aWxl Z2VzV2l0aEdyYW50ID0gKChIYXNodGFibGUpIHBhcmFtZXRlcnMuZ2V0KFBB UkFNX1NDSEVNQV9QUklWSUxFR0VTX1dJVEhfR1JBTlQpKS52YWx1ZXMoKS50 b0FycmF5KCk7CisgCQkKKyAJCWlmIChwcml2aWxlZ2VzV2l0aEdyYW50Lmxl bmd0aCAhPSAwKSB7CisgCQkKKyAJCQkvLyBBZGQgZ3JhbnQgY2FsbAorIAkJ CXVwZGF0ZVN0cmluZyArPSAiR1JBTlQgIjsKKyAJCQorIAkJCWZvciAoaW50 IGkgPSAwOyBpIDwgcHJpdmlsZWdlc1dpdGhHcmFudC5sZW5ndGg7IGkrKykg eworIAkJCisgCQkJCXVwZGF0ZVN0cmluZyArPSBwcml2aWxlZ2VzV2l0aEdy YW50W2ldOworIAkJCQorIAkJCQlpZiAoaSA8IHByaXZpbGVnZXNXaXRoR3Jh bnQubGVuZ3RoIC0gMSkKKyAJCQkJCXVwZGF0ZVN0cmluZyArPSAiLCAiOwor IAkJCQkJCisgCQkJfQorIAkJCisgCQkJdXBkYXRlU3RyaW5nICs9ICIgT04g U0NIRU1BICIgKyBzY2hlbWFMaXN0ICsgIiBUTyAiICsgdXNlckxpc3QgKyAi IFdJVEggR1JBTlQgT1BUSU9OOyAiOworIAkJCQorIAkJfQorIAkJCiAgCQly ZXR1cm4gdXBkYXRlU3RyaW5nOwkJCiAgCX0KICAJCioqKioqKioqKioqKioq KgoqKiogNzc3LDc4MyAqKioqCiAgCQkvLyB0aGF0IHRoZSBkaWFsb2cgYWx3 YXlzIGdpdmVzIHRoZSBub24tb3B0aW9uYWwgcGFyYW1ldGVycyBiZWZvcmUg aXRzIAogIAkJLy8gdG9vIGxhdGUuCiAgCiEgCQlTdHJpbmdbXSByZXF1aXJl ZFBhcmFtZXRlcnMgPSB7UEFSQU1fQ0xVU1RFUl9OQU1FLCBQQVJBTV9EQl9O QU1FLCBQQVJBTV9UQUJMRVMsIFBBUkFNX1NDSEVNQV9OQU1FLCBQQVJBTV9V U0VSUywgUEFSQU1fR1JPVVBTLCBQQVJBTV9UQUJMRV9QUklWSUxFR0VTfTsK ICAJCVN0cmluZ1tdIG9wdGlvbmFsUGFyYW1ldGVycyA9IHtQQVJBTV9QVUJM SUN9OwogIAkJU3RyaW5nIHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJU3RyaW5n IHRhYmxlTGlzdCA9ICIiOwotLS0gODk2LDkwMiAtLS0tCiAgCQkvLyB0aGF0 IHRoZSBkaWFsb2cgYWx3YXlzIGdpdmVzIHRoZSBub24tb3B0aW9uYWwgcGFy YW1ldGVycyBiZWZvcmUgaXRzIAogIAkJLy8gdG9vIGxhdGUuCiAgCiEgCQlT dHJpbmdbXSByZXF1aXJlZFBhcmFtZXRlcnMgPSB7UEFSQU1fQ0xVU1RFUl9O QU1FLCBQQVJBTV9EQl9OQU1FLCBQQVJBTV9UQUJMRVMsIFBBUkFNX1NDSEVN QV9OQU1FLCBQQVJBTV9VU0VSUywgUEFSQU1fR1JPVVBTLCBQQVJBTV9UQUJM RV9QUklWSUxFR0VTLCBQQVJBTV9UQUJMRV9QUklWSUxFR0VTX1dJVEhfR1JB TlQgfTsKICAJCVN0cmluZ1tdIG9wdGlvbmFsUGFyYW1ldGVycyA9IHtQQVJB TV9QVUJMSUN9OwogIAkJU3RyaW5nIHVwZGF0ZVN0cmluZyA9ICIiOwogIAkJ U3RyaW5nIHRhYmxlTGlzdCA9ICIiOwoqKioqKioqKioqKioqKioKKioqIDg2 Myw4NjggKioqKgotLS0gOTgyLDEwMDcgLS0tLQogIAkJCQogIAkJfQogIAkJ CisgCQlPYmplY3RbXSBwcml2aWxlZ2VzV2l0aEdyYW50ID0gKChIYXNodGFi bGUpIHBhcmFtZXRlcnMuZ2V0KFBBUkFNX1RBQkxFX1BSSVZJTEVHRVNfV0lU SF9HUkFOVCkpLnZhbHVlcygpLnRvQXJyYXkoKTsKKyAJCQorIAkJaWYgKHBy aXZpbGVnZXNXaXRoR3JhbnQubGVuZ3RoICE9IDApIHsKKyAJCQorIAkJCS8v IEFkZCBncmFudCBjYWxsCisgCQkJdXBkYXRlU3RyaW5nICs9ICJHUkFOVCAi OworIAkJCisgCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcml2aWxlZ2VzV2l0 aEdyYW50Lmxlbmd0aDsgaSsrKSB7CisgCQkKKyAJCQkJdXBkYXRlU3RyaW5n ICs9IHByaXZpbGVnZXNXaXRoR3JhbnRbaV07CisgCQkJCisgCQkJCWlmIChp IDwgcHJpdmlsZWdlc1dpdGhHcmFudC5sZW5ndGggLSAxKQorIAkJCQkJdXBk YXRlU3RyaW5nICs9ICIsICI7CisgCQkJCQkKKyAJCQl9CisgCQkKKyAJCQl1 cGRhdGVTdHJpbmcgKz0gIiBPTiBUQUJMRSAiICsgdGFibGVMaXN0ICsgIiBU TyAiICsgdXNlckxpc3QgKyAiIFdJVEggR1JBTlQgT1BUSU9OOyAiOworIAkJ CQorIAkJfQorIAkJCiAgCQlyZXR1cm4gdXBkYXRlU3RyaW5nOwkJCiAgCX0K ICB9CkluZGV4OiBzcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL3Bnc3FsL0Fi c3RyYWN0UmhkYjczRGF0YWJhc2VNZXRhRGF0YS5qYXZhCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcmhkYi9zcmMvcmhkYi9ndWl0 b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vcGdz cWwvQWJzdHJhY3RSaGRiNzNEYXRhYmFzZU1ldGFEYXRhLmphdmEsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1jIC1yMS4yIEFic3RyYWN0Umhk YjczRGF0YWJhc2VNZXRhRGF0YS5qYXZhCioqKiBzcmMvY29tL3JlZGhhdC9y aGRiL2FkbWluL3Bnc3FsL0Fic3RyYWN0UmhkYjczRGF0YWJhc2VNZXRhRGF0 YS5qYXZhCTQgTWF5IDIwMDQgMTY6NTc6MTUgLTAwMDAJMS4yCi0tLSBzcmMv Y29tL3JlZGhhdC9yaGRiL2FkbWluL3Bnc3FsL0Fic3RyYWN0UmhkYjczRGF0 YWJhc2VNZXRhRGF0YS5qYXZhCTkgSnVuIDIwMDQgMDU6Mzk6MjggLTAwMDAK KioqKioqKioqKioqKioqCioqKiAxNSwyMSAqKioqCiAgaW1wb3J0IGphdmEu c3FsLio7CiAgaW1wb3J0IGphdmEudXRpbC4qOwogIGltcG9ydCBvcmcucG9z dGdyZXNxbC5qZGJjMy4qOwohIGltcG9ydCBvcmcucG9zdGdyZXNxbC5GaWVs ZDsKICAKICBpbXBvcnQgY29tLnJlZGhhdC5yaGRiLmFkbWluLnV0aWxzLkFk bWluTmFtZWRPYmplY3Q7CiAgCi0tLSAxNSwyMSAtLS0tCiAgaW1wb3J0IGph dmEuc3FsLio7CiAgaW1wb3J0IGphdmEudXRpbC4qOwogIGltcG9ydCBvcmcu cG9zdGdyZXNxbC5qZGJjMy4qOwohIGltcG9ydCBvcmcucG9zdGdyZXNxbC5j b3JlLio7CiAgCiAgaW1wb3J0IGNvbS5yZWRoYXQucmhkYi5hZG1pbi51dGls cy5BZG1pbk5hbWVkT2JqZWN0OwogIAoqKioqKioqKioqKioqKioKKioqIDk4 Miw5OTYgKioqKgogIAlwdWJsaWMgUmVzdWx0U2V0IGdldERhdGFiYXNlUHJp dmlsZWdlcyhTdHJpbmcgZGJOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsK ICAJCVN0cmluZyBzcWw7CiAgCQkJCiEgCQlGaWVsZCBmW10gPSBuZXcgRmll bGRbMl07CiAgCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKICAKICAJCQkK ICAJCWZbMF0gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwgIkdSQU5URUUiLCBp VmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKICAJCWZbMV0gPSBu ZXcgRmllbGQoY29ubmVjdGlvbiwgIlBSSVZJTEVHRSIsIGlWYXJjaGFyT2lk LCBnZXRNYXhOYW1lTGVuZ3RoKCkpOwogIAotIAkJc3FsID0gIlNFTEVDVCBk LmRhdGFjbCBmcm9tIHBnX2RhdGFiYXNlIGQgV0hFUkUgZGF0bmFtZT0nIiAr IGVzY2FwZVF1b3RlcyhkYk5hbWUpICsgIicgIjsKLSAJCiAgCQlSZXN1bHRT ZXQgcnMgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVR dWVyeShzcWwpOwogIAkJCiAgCQl3aGlsZSAocnMubmV4dCgpKSB7Ci0tLSA5 ODIsOTk5IC0tLS0KICAJcHVibGljIFJlc3VsdFNldCBnZXREYXRhYmFzZVBy aXZpbGVnZXMoU3RyaW5nIGRiTmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7 CiAgCQlTdHJpbmcgc3FsOwogIAkJCQohIAkJRmllbGQgZltdID0gbmV3IEZp ZWxkWzRdOwogIAkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CiAgCiAgCQkJ CiAgCQlmWzBdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJHUkFOVEVFIiwg aVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgoKSk7CiAgCQlmWzFdID0g bmV3IEZpZWxkKGNvbm5lY3Rpb24sICJQUklWSUxFR0UiLCBpVmFyY2hhck9p ZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKKyAJCWZbMl0gPSBuZXcgRmllbGQo Y29ubmVjdGlvbiwgIkdSQU5UT1IiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFt ZUxlbmd0aCgpKTsKKyAJCWZbM10gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwg IklTX0dSQU5UQUJMRSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3Ro KCkpOworIAorIAkJc3FsID0JIlNFTEVDVCBkLmRhdGFjbCwgdS51c2VuYW1l IGZyb20gcGdfZGF0YWJhc2UgZCwgcGdfdXNlciB1ICIgKworIAkJCQkiIFdI RVJFIGRhdG5hbWU9JyIgKyBlc2NhcGVRdW90ZXMoZGJOYW1lKSArICInIEFO RCB1LnVzZXN5c2lkPWQuZGF0ZGJhIjsKICAKICAJCVJlc3VsdFNldCBycyA9 IGNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KHNx bCk7CiAgCQkKICAJCXdoaWxlIChycy5uZXh0KCkpIHsKKioqKioqKioqKioq KioqCioqKiA5OTksMTAwNSAqKioqCiAgCQkJLy9nZXQgdGhlIHZhbHVlcyBv ZiBhcnJheSAKICAJCQkKICAJCQlTdHJpbmcgYWNsID0gcnMuZ2V0U3RyaW5n KDEpOwohIAkJCQogIAkJCS8vcGFyc2UgYWNsIGFycmF5IGFuZCBwdXQgaXRz IHZhbHVlcyBpbnRvIGEgaGFzaHRhYmxlIHRoYXQgaGFzIAogIAkJCS8va2V5 cyBhcyB0aGUgcHJpdmlsZWdlcyBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0aGUg Z3JhbnRlZSBvZiB0aGUgcHJpdmlsZWdlcwogIAkJCQkJCQotLS0gMTAwMiwx MDA5IC0tLS0KICAJCQkvL2dldCB0aGUgdmFsdWVzIG9mIGFycmF5IAogIAkJ CQogIAkJCVN0cmluZyBhY2wgPSBycy5nZXRTdHJpbmcoMSk7CiEgCQkJU3Ry aW5nIG93bmVyID0gcnMuZ2V0U3RyaW5nKDIpOwohIAogIAkJCS8vcGFyc2Ug YWNsIGFycmF5IGFuZCBwdXQgaXRzIHZhbHVlcyBpbnRvIGEgaGFzaHRhYmxl IHRoYXQgaGFzIAogIAkJCS8va2V5cyBhcyB0aGUgcHJpdmlsZWdlcyBuYW1l cyBhbmQgdmFsdWVzIGFyZSB0aGUgZ3JhbnRlZSBvZiB0aGUgcHJpdmlsZWdl cwogIAkJCQkJCQoqKioqKioqKioqKioqKioKKioqIDEwMTksMTA0MCAqKioq CiAgCQkJCWkrKzsKICAJCQl9CiAgCQkJCiAgCQkJLy9mb3IgZXZlcnkgcGVy bWlzc2lvbiBnZXQgdGhlIHVzZXIgb3IgZ3JvdXAgbmFtZQogIAkJCWZvciAo aT0wOyBpPHBlcm1OYW1lcy5sZW5ndGg7IGkrKykgewogIAkJCQlieXRlW10g cHJpdmlsZWdlID0gcGVybU5hbWVzW2ldLmdldEJ5dGVzKCk7CiAgCQkJCVZl Y3RvciBncmFudGVlcyA9IChWZWN0b3IpcGVybWlzc2lvbnMuZ2V0KHBlcm1O YW1lc1tpXSk7CiAgCQkJCWZvciAoaW50IGo9MDsgajxncmFudGVlcy5zaXpl KCk7IGorKykgewohIAkJCQkJU3RyaW5nIGdyYW50ZWUgPSAoU3RyaW5nKWdy YW50ZWVzLmVsZW1lbnRBdChqKTsKISAJCQkJCWJ5dGVbXVtdIHR1cGxlID0g bmV3IGJ5dGVbMl1bXTsKICAJCQkJCXR1cGxlWzBdID0gZ3JhbnRlZS5nZXRC eXRlcygpOwogIAkJCQkJdHVwbGVbMV0gPSBwcml2aWxlZ2U7CiAgCQkJCQl2 LmFkZEVsZW1lbnQodHVwbGUpOwogIAkJCQl9CiAgCQkJfQotIAkJCQkKICAJ CX0KISAJCQkKISAJCXJldHVybiBjb25uZWN0aW9uLmdldFJlc3VsdFNldChu dWxsLCBmLCB2LCAiT0siLCAxKTsJCiAgCX0KICAKICAJLyoqCi0tLSAxMDIz LDEwNTUgLS0tLQogIAkJCQlpKys7CiAgCQkJfQogIAkJCQorIAkJCUFycmF5 cy5zb3J0KHBlcm1OYW1lcyk7CiAgCQkJLy9mb3IgZXZlcnkgcGVybWlzc2lv biBnZXQgdGhlIHVzZXIgb3IgZ3JvdXAgbmFtZQogIAkJCWZvciAoaT0wOyBp PHBlcm1OYW1lcy5sZW5ndGg7IGkrKykgewogIAkJCQlieXRlW10gcHJpdmls ZWdlID0gcGVybU5hbWVzW2ldLmdldEJ5dGVzKCk7CiAgCQkJCVZlY3RvciBn cmFudGVlcyA9IChWZWN0b3IpcGVybWlzc2lvbnMuZ2V0KHBlcm1OYW1lc1tp XSk7CiAgCQkJCWZvciAoaW50IGo9MDsgajxncmFudGVlcy5zaXplKCk7IGor KykgewohIAkJCQkJU3RyaW5nIGdyYW50ZWUgPSAoU3RyaW5nKSgoU3RyaW5n W10pZ3JhbnRlZXMuZWxlbWVudEF0KGopKVswXTsKISAJCQkJCVN0cmluZyBn cmFudG9yID0gKFN0cmluZykoKFN0cmluZ1tdKWdyYW50ZWVzLmVsZW1lbnRB dChqKSlbMV07CiEgCQkJCQlncmFudG9yID0gZ3JhbnRvci5lcXVhbHMoIiIp ID8gb3duZXIgOiBncmFudG9yOwohIAkJCQkJYm9vbGVhbiBpc1ByaXZHcmFu dGFibGUgPSAoKFN0cmluZ1tdKWdyYW50ZWVzLmVsZW1lbnRBdChqKSlbMl0u ZXF1YWxzKCJ0Iik7CiEgCiEgCQkJCQkvLyBUaGUgaGFuZGxpbmcgb2YgdGhp cyBzbGlnaHRseSBkaWZmZXJzIGR1ZSB0byBkaWZmZXJlbmNlcyAKISAJCQkJ CS8vIGluIDcuMy54IGFuZCA3LjQrIGJhY2tlbmRzCiEgCiEgCQkJCQlTdHJp bmcgZ3JhbnRhYmxlID0gKGlzUHJpdkdyYW50YWJsZSB8fCBvd25lci5lcXVh bHMoZ3JhbnRlZSkpID8gIllFUyIgOiAiTk8iOwohIAohIAkJCQkJYnl0ZVtd W10gdHVwbGUgPSBuZXcgYnl0ZVs0XVtdOwogIAkJCQkJdHVwbGVbMF0gPSBn cmFudGVlLmdldEJ5dGVzKCk7CiAgCQkJCQl0dXBsZVsxXSA9IHByaXZpbGVn ZTsKKyAJCQkJCXR1cGxlWzJdID0gZ3JhbnRvci5nZXRCeXRlcygpOworIAkJ CQkJdHVwbGVbM10gPSBncmFudGFibGUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXYu YWRkRWxlbWVudCh0dXBsZSk7CiAgCQkJCX0KICAJCQl9CiAgCQl9CiEgCiEg CQlyZXR1cm4gKFJlc3VsdFNldCkgKChCYXNlU3RhdGVtZW50KWNvbm5lY3Rp b24uY3JlYXRlU3RhdGVtZW50KCkpLmNyZWF0ZVJlc3VsdFNldChmLCB2LCAi T0siLCAxLCAwLCBmYWxzZSk7CiAgCX0KICAKICAJLyoqCioqKioqKioqKioq KioqKgoqKiogMTQ2NCwxNDc3ICoqKioKICAJCQogIAkJU3RyaW5nIHNxbDsK ICAJCQkKISAJCUZpZWxkIGZbXSA9IG5ldyBGaWVsZFsyXTsKICAJCVZlY3Rv ciB2ID0gbmV3IFZlY3RvcigpOwogIAogIAkJCQogIAkJZlswXSA9IG5ldyBG aWVsZChjb25uZWN0aW9uLCAiR1JBTlRFRSIsIGlWYXJjaGFyT2lkLCBnZXRN YXhOYW1lTGVuZ3RoKCkpOwogIAkJZlsxXSA9IG5ldyBGaWVsZChjb25uZWN0 aW9uLCAiUFJJVklMRUdFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5n dGgoKSk7CiAgCiEgCQlzcWwgPSAiU0VMRUNUIHByb2FjbCBmcm9tIHBnX3By b2MgV0hFUkUgb2lkPSIgKyBPSUQ7CiAgCQogIAkJUmVzdWx0U2V0IHJzID0g Y29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoc3Fs KTsKICAJCQotLS0gMTQ3OSwxNDk0IC0tLS0KICAJCQogIAkJU3RyaW5nIHNx bDsKICAJCQkKISAJCUZpZWxkIGZbXSA9IG5ldyBGaWVsZFs0XTsKICAJCVZl Y3RvciB2ID0gbmV3IFZlY3RvcigpOwogIAogIAkJCQogIAkJZlswXSA9IG5l dyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRFRSIsIGlWYXJjaGFyT2lkLCBn ZXRNYXhOYW1lTGVuZ3RoKCkpOwogIAkJZlsxXSA9IG5ldyBGaWVsZChjb25u ZWN0aW9uLCAiUFJJVklMRUdFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVM ZW5ndGgoKSk7CisgCQlmWzJdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJH UkFOVE9SIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgoKSk7Cisg CQlmWzNdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJJU19HUkFOVEFCTEUi LCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKICAKISAJCXNx bCA9ICJTRUxFQ1QgcC5wcm9hY2wsIHUudXNlbmFtZSBmcm9tIHBnX3Byb2Mg cCwgcGdfdXNlciB1IFdIRVJFIHAub2lkPSIgKyBPSUQgKyAiIEFORCBwLnBy b293bmVyPXUudXNlc3lzaWQiOwogIAkKICAJCVJlc3VsdFNldCBycyA9IGNv bm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KHNxbCk7 CiAgCQkKKioqKioqKioqKioqKioqCioqKiAxNDgxLDE0ODYgKioqKgotLS0g MTQ5OCwxNTA0IC0tLS0KICAJCQkvL2dldCB0aGUgdmFsdWVzIG9mIGFycmF5 IAogIAkJCQogIAkJCVN0cmluZyBhY2wgPSBycy5nZXRTdHJpbmcoMSk7Cisg CQkJU3RyaW5nIG93bmVyID0gcnMuZ2V0U3RyaW5nKDIpOwogIAkJCQogIAkJ CS8vcGFyc2UgYWNsIGFycmF5IGFuZCBwdXQgaXRzIHZhbHVlcyBpbnRvIGEg aGFzaHRhYmxlIHRoYXQgaGFzIAogIAkJCS8va2V5cyBhcyB0aGUgcHJpdmls ZWdlcyBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0aGUgZ3JhbnRlZSBvZiB0aGUg cHJpdmlsZWdlcwoqKioqKioqKioqKioqKioKKioqIDE1MDEsMTUyMyAqKioq CiAgCQkJCWkrKzsKICAJCQl9CiAgCQkJCiAgCQkJLy9mb3IgZXZlcnkgcGVy bWlzc2lvbiBnZXQgdGhlIHVzZXIgb3IgZ3JvdXAgbmFtZQogIAkJCWZvciAo aT0wOyBpPHBlcm1OYW1lcy5sZW5ndGg7IGkrKykgewogIAkJCQlieXRlW10g cHJpdmlsZWdlID0gcGVybU5hbWVzW2ldLmdldEJ5dGVzKCk7CiAgCQkJCVZl Y3RvciBncmFudGVlcyA9IChWZWN0b3IpcGVybWlzc2lvbnMuZ2V0KHBlcm1O YW1lc1tpXSk7CiAgCQkJCWZvciAoaW50IGo9MDsgajxncmFudGVlcy5zaXpl KCk7IGorKykgewohIAkJCQkJU3RyaW5nIGdyYW50ZWUgPSAoU3RyaW5nKWdy YW50ZWVzLmVsZW1lbnRBdChqKTsKISAJCQkJCWJ5dGVbXVtdIHR1cGxlID0g bmV3IGJ5dGVbMl1bXTsKICAJCQkJCXR1cGxlWzBdID0gZ3JhbnRlZS5nZXRC eXRlcygpOwogIAkJCQkJdHVwbGVbMV0gPSBwcml2aWxlZ2U7CiAgCQkJCQl2 LmFkZEVsZW1lbnQodHVwbGUpOwogIAkJCQl9CiAgCQkJfQogIAkJCQkKICAJ CX0KISAJCQkKISAJCXJldHVybiBjb25uZWN0aW9uLmdldFJlc3VsdFNldChu dWxsLCBmLCB2LCAiT0siLCAxKTsKISAJCQkJCiAgCX0KICAKICAKLS0tIDE1 MTksMTU1MiAtLS0tCiAgCQkJCWkrKzsKICAJCQl9CiAgCQkJCisgCQkJQXJy YXlzLnNvcnQocGVybU5hbWVzKTsKICAJCQkvL2ZvciBldmVyeSBwZXJtaXNz aW9uIGdldCB0aGUgdXNlciBvciBncm91cCBuYW1lCiAgCQkJZm9yIChpPTA7 IGk8cGVybU5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgCQkJCWJ5dGVbXSBwcml2 aWxlZ2UgPSBwZXJtTmFtZXNbaV0uZ2V0Qnl0ZXMoKTsKICAJCQkJVmVjdG9y IGdyYW50ZWVzID0gKFZlY3RvcilwZXJtaXNzaW9ucy5nZXQocGVybU5hbWVz W2ldKTsKICAJCQkJZm9yIChpbnQgaj0wOyBqPGdyYW50ZWVzLnNpemUoKTsg aisrKSB7CiEgCQkJCQlTdHJpbmcgZ3JhbnRlZSA9IChTdHJpbmcpKChTdHJp bmdbXSlncmFudGVlcy5lbGVtZW50QXQoaikpWzBdOwohIAkJCQkJU3RyaW5n IGdyYW50b3IgPSAoU3RyaW5nKSgoU3RyaW5nW10pZ3JhbnRlZXMuZWxlbWVu dEF0KGopKVsxXTsKISAJCQkJCWdyYW50b3IgPSBncmFudG9yLmVxdWFscygi IikgPyBvd25lciA6IGdyYW50b3I7CiEgCQkJCQlib29sZWFuIGlzUHJpdkdy YW50YWJsZSA9ICgoU3RyaW5nW10pZ3JhbnRlZXMuZWxlbWVudEF0KGopKVsy XS5lcXVhbHMoInQiKTsKISAKISAJCQkJCS8vIFRoZSBoYW5kbGluZyBvZiB0 aGlzIHNsaWdodGx5IGRpZmZlcnMgZHVlIHRvIGRpZmZlcmVuY2VzIAohIAkJ CQkJLy8gaW4gNy4zLnggYW5kIDcuNCsgYmFja2VuZHMKISAKISAJCQkJCVN0 cmluZyBncmFudGFibGUgPSAoaXNQcml2R3JhbnRhYmxlIHx8IG93bmVyLmVx dWFscyhncmFudGVlKSkgPyAiWUVTIiA6ICJOTyI7CiEgCiEgCQkJCQlieXRl W11bXSB0dXBsZSA9IG5ldyBieXRlWzRdW107CiAgCQkJCQl0dXBsZVswXSA9 IGdyYW50ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXR1cGxlWzFdID0gcHJpdmls ZWdlOworIAkJCQkJdHVwbGVbMl0gPSBncmFudG9yLmdldEJ5dGVzKCk7Cisg CQkJCQl0dXBsZVszXSA9IGdyYW50YWJsZS5nZXRCeXRlcygpOwogIAkJCQkJ di5hZGRFbGVtZW50KHR1cGxlKTsKICAJCQkJfQogIAkJCX0KICAJCQkJCiAg CQl9CiEgCiEgCQlyZXR1cm4gKFJlc3VsdFNldCkgKChCYXNlU3RhdGVtZW50 KWNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCkpLmNyZWF0ZVJlc3VsdFNl dChmLCB2LCAiT0siLCAxLCAwLCBmYWxzZSk7CiAgCX0KICAKICAKKioqKioq KioqKioqKioqCioqKiAxNTM1LDE1NTMgKioqKgogIAkJCiAgCQlTdHJpbmcg c3FsOwogIAkJCQohIAkJRmllbGQgZltdID0gbmV3IEZpZWxkWzJdOwogIAkJ VmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CiAgCiAgCQkJCiAgCQlmWzBdID0g bmV3IEZpZWxkKGNvbm5lY3Rpb24sICJHUkFOVEVFIiwgaVZhcmNoYXJPaWQs IGdldE1heE5hbWVMZW5ndGgoKSk7CiAgCQlmWzFdID0gbmV3IEZpZWxkKGNv bm5lY3Rpb24sICJQUklWSUxFR0UiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFt ZUxlbmd0aCgpKTsKICAKISAKISAJCXNxbCA9IAkiIFNFTEVDVCBwLnByb2Fj bCAgIiArCiEgCQkJIiBGUk9NIHBnX3Byb2MgcCwgcGdfbmFtZXNwYWNlIG4g IiArCiAgCQkJIiBXSEVSRSBuLm5zcG5hbWU9JyIgKyBlc2NhcGVRdW90ZXMo c2NoZW1hTmFtZSkgKyAiJyBBTkQgIiArCiAgCQkJIiAgCXAucHJvbmFtZXNw YWNlPW4ub2lkIEFORCAiICsKISAJCQkiCXAucHJvbmFtZSA9ICciICsgZXNj YXBlUXVvdGVzKGZ1bmN0aW9uTmFtZSkgKyAiJyAiOwogIAogIAkJUmVzdWx0 U2V0IHJzID0gY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRl UXVlcnkoc3FsKTsKICAJCQotLS0gMTU2NCwxNTg0IC0tLS0KICAJCQogIAkJ U3RyaW5nIHNxbDsKICAJCQkKISAJCUZpZWxkIGZbXSA9IG5ldyBGaWVsZFs0 XTsKICAJCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwogIAogIAkJCQogIAkJ ZlswXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRFRSIsIGlWYXJj aGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOwogIAkJZlsxXSA9IG5ldyBG aWVsZChjb25uZWN0aW9uLCAiUFJJVklMRUdFIiwgaVZhcmNoYXJPaWQsIGdl dE1heE5hbWVMZW5ndGgoKSk7CisgCQlmWzJdID0gbmV3IEZpZWxkKGNvbm5l Y3Rpb24sICJHUkFOVE9SIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5n dGgoKSk7CisgCQlmWzNdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJJU19H UkFOVEFCTEUiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsK ICAKISAJCXNxbCA9IAkiIFNFTEVDVCBwLnByb2FjbCwgdS51c2VuYW1lICAi ICsKISAJCQkiIEZST00gcGdfcHJvYyBwLCBwZ19uYW1lc3BhY2UgbiwgcGdf dXNlciB1ICIgKwogIAkJCSIgV0hFUkUgbi5uc3BuYW1lPSciICsgZXNjYXBl UXVvdGVzKHNjaGVtYU5hbWUpICsgIicgQU5EICIgKwogIAkJCSIgIAlwLnBy b25hbWVzcGFjZT1uLm9pZCBBTkQgIiArCiEgCQkJIglwLnByb25hbWUgPSAn IiArIGVzY2FwZVF1b3RlcyhmdW5jdGlvbk5hbWUpICsgIicgQU5EIiArCiEg CQkJIiAgIHAucHJvb3duZXI9dS51c2VzeXNpZCI7CiAgCiAgCQlSZXN1bHRT ZXQgcnMgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVR dWVyeShzcWwpOwogIAkJCioqKioqKioqKioqKioqKgoqKiogMTU1NywxNTYy ICoqKioKLS0tIDE1ODgsMTU5NCAtLS0tCiAgCQkJLy9nZXQgdGhlIHZhbHVl cyBvZiBhcnJheSAKICAJCQkKICAJCQlTdHJpbmcgYWNsID0gcnMuZ2V0U3Ry aW5nKDEpOworIAkJCVN0cmluZyBvd25lciA9IHJzLmdldFN0cmluZygyKTsK ICAJCQkKICAJCQkvL3BhcnNlIGFjbCBhcnJheSBhbmQgcHV0IGl0cyB2YWx1 ZXMgaW50byBhIGhhc2h0YWJsZSB0aGF0IGhhcyAKICAJCQkvL2tleXMgYXMg dGhlIHByaXZpbGVnZXMgbmFtZXMgYW5kIHZhbHVlcyBhcmUgdGhlIGdyYW50 ZWUgb2YgdGhlIHByaXZpbGVnZXMKKioqKioqKioqKioqKioqCioqKiAxNTc3 LDE1OTkgKioqKgogIAkJCQlpKys7CiAgCQkJfQogIAkJCQogIAkJCS8vZm9y IGV2ZXJ5IHBlcm1pc3Npb24gZ2V0IHRoZSB1c2VyIG9yIGdyb3VwIG5hbWUK ICAJCQlmb3IgKGk9MDsgaTxwZXJtTmFtZXMubGVuZ3RoOyBpKyspIHsKICAJ CQkJYnl0ZVtdIHByaXZpbGVnZSA9IHBlcm1OYW1lc1tpXS5nZXRCeXRlcygp OwogIAkJCQlWZWN0b3IgZ3JhbnRlZXMgPSAoVmVjdG9yKXBlcm1pc3Npb25z LmdldChwZXJtTmFtZXNbaV0pOwogIAkJCQlmb3IgKGludCBqPTA7IGo8Z3Jh bnRlZXMuc2l6ZSgpOyBqKyspIHsKISAJCQkJCVN0cmluZyBncmFudGVlID0g KFN0cmluZylncmFudGVlcy5lbGVtZW50QXQoaik7CiEgCQkJCQlieXRlW11b XSB0dXBsZSA9IG5ldyBieXRlWzJdW107CiAgCQkJCQl0dXBsZVswXSA9IGdy YW50ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXR1cGxlWzFdID0gcHJpdmlsZWdl OwogIAkJCQkJdi5hZGRFbGVtZW50KHR1cGxlKTsKICAJCQkJfQogIAkJCX0K ICAJCQkJCiAgCQl9CiEgCQkJCiEgCQlyZXR1cm4gY29ubmVjdGlvbi5nZXRS ZXN1bHRTZXQobnVsbCwgZiwgdiwgIk9LIiwgMSk7CiEgCQkJCQogIAl9CiAg CiAgCS8qKgotLS0gMTYwOSwxNjQyIC0tLS0KICAJCQkJaSsrOwogIAkJCX0K ICAJCQkKKyAJCQlBcnJheXMuc29ydChwZXJtTmFtZXMpOwogIAkJCS8vZm9y IGV2ZXJ5IHBlcm1pc3Npb24gZ2V0IHRoZSB1c2VyIG9yIGdyb3VwIG5hbWUK ICAJCQlmb3IgKGk9MDsgaTxwZXJtTmFtZXMubGVuZ3RoOyBpKyspIHsKICAJ CQkJYnl0ZVtdIHByaXZpbGVnZSA9IHBlcm1OYW1lc1tpXS5nZXRCeXRlcygp OwogIAkJCQlWZWN0b3IgZ3JhbnRlZXMgPSAoVmVjdG9yKXBlcm1pc3Npb25z LmdldChwZXJtTmFtZXNbaV0pOwogIAkJCQlmb3IgKGludCBqPTA7IGo8Z3Jh bnRlZXMuc2l6ZSgpOyBqKyspIHsKISAJCQkJCVN0cmluZyBncmFudGVlID0g KFN0cmluZykoKFN0cmluZ1tdKWdyYW50ZWVzLmVsZW1lbnRBdChqKSlbMF07 CiEgCQkJCQlTdHJpbmcgZ3JhbnRvciA9IChTdHJpbmcpKChTdHJpbmdbXSln cmFudGVlcy5lbGVtZW50QXQoaikpWzFdOwohIAkJCQkJZ3JhbnRvciA9IGdy YW50b3IuZXF1YWxzKCIiKSA/IG93bmVyIDogZ3JhbnRvcjsKISAJCQkJCWJv b2xlYW4gaXNQcml2R3JhbnRhYmxlID0gKChTdHJpbmdbXSlncmFudGVlcy5l bGVtZW50QXQoaikpWzJdLmVxdWFscygidCIpOwohIAohIAkJCQkJLy8gVGhl IGhhbmRsaW5nIG9mIHRoaXMgc2xpZ2h0bHkgZGlmZmVycyBkdWUgdG8gZGlm ZmVyZW5jZXMgCiEgCQkJCQkvLyBpbiA3LjMueCBhbmQgNy40KyBiYWNrZW5k cwohIAohIAkJCQkJU3RyaW5nIGdyYW50YWJsZSA9IChpc1ByaXZHcmFudGFi bGUgfHwgb3duZXIuZXF1YWxzKGdyYW50ZWUpKSA/ICJZRVMiIDogIk5PIjsK ISAKISAJCQkJCWJ5dGVbXVtdIHR1cGxlID0gbmV3IGJ5dGVbNF1bXTsKICAJ CQkJCXR1cGxlWzBdID0gZ3JhbnRlZS5nZXRCeXRlcygpOwogIAkJCQkJdHVw bGVbMV0gPSBwcml2aWxlZ2U7CisgCQkJCQl0dXBsZVsyXSA9IGdyYW50b3Iu Z2V0Qnl0ZXMoKTsKKyAJCQkJCXR1cGxlWzNdID0gZ3JhbnRhYmxlLmdldEJ5 dGVzKCk7CiAgCQkJCQl2LmFkZEVsZW1lbnQodHVwbGUpOwogIAkJCQl9CiAg CQkJfQogIAkJCQkKICAJCX0KISAKISAJCXJldHVybiAoUmVzdWx0U2V0KSAo KEJhc2VTdGF0ZW1lbnQpY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKSku Y3JlYXRlUmVzdWx0U2V0KGYsIHYsICJPSyIsIDEsIDAsIGZhbHNlKTsJCQkJ CiAgCX0KICAKICAJLyoqCioqKioqKioqKioqKioqKgoqKiogMTYzMSwxNjM2 ICoqKioKLS0tIDE2NzQsMTY5MCAtLS0tCiAgCX0KICAKICAJLyoqCisgCSAq IFJldHVybnMgdGhlIGdyYW50IG9wdGlvbiBzdHJpbmcgZm9yIHRoaXMgZGF0 YWJhc2UgdmVyc2lvbi4gRm9yIDcuMyBhbmQgCisgCSAqIGxvd2VyLCB0aGVl IHN0cmluZyBpcyBqdXN0ICIiCisgCSAqCisgCSAqIEByZXR1cm4gVGhlIHN0 cmluZworIAkgKi8KKyAJCisgCXB1YmxpYyBTdHJpbmcgZ2V0R3JhbnRPcHRp b25TdHJpbmcoKSB7CisgCQlyZXR1cm4gIiI7CisgCX0KKyAJCisgCSAvKioK ICAJICogUmV0dXJucyBpbmZvIGZvciBhIGdyb3VwLgogIAkgKgogIAkgKiBA cGFyYW0gZ3JvdXBOYW1lIE5hbWUgb2YgdGhlIGdyb3VwIGZvciB3aGljaCBp bmZvIGlzIG5lZWRlZC4KKioqKioqKioqKioqKioqCioqKiAyMDQ0LDIwNTUg KioqKgogIAkJCiAgCQlTdHJpbmcgc3FsOwogIAkJCQohIAkJRmllbGQgZltd ID0gbmV3IEZpZWxkWzJdOwogIAkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7 CiAgCiAgCQkJCiAgCQlmWzBdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJH UkFOVEVFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgoKSk7CiAg CQlmWzFdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJQUklWSUxFR0UiLCBp VmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKICAKICAJCXNxbCA9 ICJTRUxFQ1QgbC5sYW5hY2wgZnJvbSBwZ19sYW5ndWFnZSBsIFdIRVJFIGxh bm5hbWU9JyIgKyBlc2NhcGVRdW90ZXMobmFtZSkgKyAiJyAiOwogIAkKLS0t IDIwOTgsMjExMSAtLS0tCiAgCQkKICAJCVN0cmluZyBzcWw7CiAgCQkJCiEg CQlGaWVsZCBmW10gPSBuZXcgRmllbGRbNF07CiAgCQlWZWN0b3IgdiA9IG5l dyBWZWN0b3IoKTsKICAKICAJCQkKICAJCWZbMF0gPSBuZXcgRmllbGQoY29u bmVjdGlvbiwgIkdSQU5URUUiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxl bmd0aCgpKTsKICAJCWZbMV0gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwgIlBS SVZJTEVHRSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOwor IAkJZlsyXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRPUiIsIGlW YXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZlszXSA9IG5l dyBGaWVsZChjb25uZWN0aW9uLCAiSVNfR1JBTlRBQkxFIiwgaVZhcmNoYXJP aWQsIGdldE1heE5hbWVMZW5ndGgoKSk7CiAgCiAgCQlzcWwgPSAiU0VMRUNU IGwubGFuYWNsIGZyb20gcGdfbGFuZ3VhZ2UgbCBXSEVSRSBsYW5uYW1lPSci ICsgZXNjYXBlUXVvdGVzKG5hbWUpICsgIicgIjsKICAJCioqKioqKioqKioq KioqKgoqKiogMjA4MSwyMTAyICoqKioKICAJCQkJaSsrOwogIAkJCX0KICAJ CQkKICAJCQkvL2ZvciBldmVyeSBwZXJtaXNzaW9uIGdldCB0aGUgdXNlciBv ciBncm91cCBuYW1lCiAgCQkJZm9yIChpPTA7IGk8cGVybU5hbWVzLmxlbmd0 aDsgaSsrKSB7CiAgCQkJCWJ5dGVbXSBwcml2aWxlZ2UgPSBwZXJtTmFtZXNb aV0uZ2V0Qnl0ZXMoKTsKICAJCQkJVmVjdG9yIGdyYW50ZWVzID0gKFZlY3Rv cilwZXJtaXNzaW9ucy5nZXQocGVybU5hbWVzW2ldKTsKICAJCQkJZm9yIChp bnQgaj0wOyBqPGdyYW50ZWVzLnNpemUoKTsgaisrKSB7CiEgCQkJCQlTdHJp bmcgZ3JhbnRlZSA9IChTdHJpbmcpZ3JhbnRlZXMuZWxlbWVudEF0KGopOwoh IAkJCQkJYnl0ZVtdW10gdHVwbGUgPSBuZXcgYnl0ZVsyXVtdOwogIAkJCQkJ dHVwbGVbMF0gPSBncmFudGVlLmdldEJ5dGVzKCk7CiAgCQkJCQl0dXBsZVsx XSA9IHByaXZpbGVnZTsKICAJCQkJCXYuYWRkRWxlbWVudCh0dXBsZSk7CiAg CQkJCX0KICAJCQl9CiAgCQkJCQogIAkJfQogIAkJCQohIAkJcmV0dXJuIGNv bm5lY3Rpb24uZ2V0UmVzdWx0U2V0KG51bGwsIGYsIHYsICJPSyIsIDEpOwkJ CQkKICAJfQogIAkKICAJLyoqCi0tLSAyMTM3LDIxNjkgLS0tLQogIAkJCQlp Kys7CiAgCQkJfQogIAkJCQorIAkJCUFycmF5cy5zb3J0KHBlcm1OYW1lcyk7 CiAgCQkJLy9mb3IgZXZlcnkgcGVybWlzc2lvbiBnZXQgdGhlIHVzZXIgb3Ig Z3JvdXAgbmFtZQogIAkJCWZvciAoaT0wOyBpPHBlcm1OYW1lcy5sZW5ndGg7 IGkrKykgewogIAkJCQlieXRlW10gcHJpdmlsZWdlID0gcGVybU5hbWVzW2ld LmdldEJ5dGVzKCk7CiAgCQkJCVZlY3RvciBncmFudGVlcyA9IChWZWN0b3Ip cGVybWlzc2lvbnMuZ2V0KHBlcm1OYW1lc1tpXSk7CiAgCQkJCWZvciAoaW50 IGo9MDsgajxncmFudGVlcy5zaXplKCk7IGorKykgewohIAkJCQkJU3RyaW5n IGdyYW50ZWUgPSAoU3RyaW5nKSgoU3RyaW5nW10pZ3JhbnRlZXMuZWxlbWVu dEF0KGopKVswXTsKISAJCQkJCVN0cmluZyBncmFudG9yID0gKFN0cmluZyko KFN0cmluZ1tdKWdyYW50ZWVzLmVsZW1lbnRBdChqKSlbMV07CiEgCQkJCQli b29sZWFuIGlzUHJpdkdyYW50YWJsZSA9ICgoU3RyaW5nW10pZ3JhbnRlZXMu ZWxlbWVudEF0KGopKVsyXS5lcXVhbHMoInQiKTsKISAKISAJCQkJCS8vIFRo ZSBoYW5kbGluZyBvZiB0aGlzIHNsaWdodGx5IGRpZmZlcnMgZHVlIHRvIGRp ZmZlcmVuY2VzIAohIAkJCQkJLy8gaW4gNy4zLnggYW5kIDcuNCsgYmFja2Vu ZHMKISAKISAJCQkJCVN0cmluZyBncmFudGFibGUgPSBpc1ByaXZHcmFudGFi bGUgPyAiWUVTIiA6ICJOTyI7CiEgCiEgCQkJCQlieXRlW11bXSB0dXBsZSA9 IG5ldyBieXRlWzRdW107CiAgCQkJCQl0dXBsZVswXSA9IGdyYW50ZWUuZ2V0 Qnl0ZXMoKTsKICAJCQkJCXR1cGxlWzFdID0gcHJpdmlsZWdlOworIAkJCQkJ dHVwbGVbMl0gPSBncmFudG9yLmdldEJ5dGVzKCk7CisgCQkJCQl0dXBsZVsz XSA9IGdyYW50YWJsZS5nZXRCeXRlcygpOwogIAkJCQkJdi5hZGRFbGVtZW50 KHR1cGxlKTsKICAJCQkJfQogIAkJCX0KICAJCQkJCiAgCQl9CiAgCQkJCiEg CQlyZXR1cm4gKFJlc3VsdFNldCkgKChCYXNlU3RhdGVtZW50KWNvbm5lY3Rp b24uY3JlYXRlU3RhdGVtZW50KCkpLmNyZWF0ZVJlc3VsdFNldChmLCB2LCAi T0siLCAxLCAwLCBmYWxzZSk7CQogIAl9CiAgCQogIAkvKioKKioqKioqKioq KioqKioqCioqKiAyNjc0LDI2ODcgKioqKgogIAlwdWJsaWMgUmVzdWx0U2V0 IGdldFNjaGVtYVByaXZpbGVnZXMoU3RyaW5nIHNjaGVtYU5hbWUpIHRocm93 cyBTUUxFeGNlcHRpb24gewogIAkJU3RyaW5nIHNxbDsKICAJCQkKISAJCUZp ZWxkIGZbXSA9IG5ldyBGaWVsZFsyXTsKICAJCVZlY3RvciB2ID0gbmV3IFZl Y3RvcigpOwogIAogIAkJCQogIAkJZlswXSA9IG5ldyBGaWVsZChjb25uZWN0 aW9uLCAiR1JBTlRFRSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3Ro KCkpOwogIAkJZlsxXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiUFJJVklM RUdFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgoKSk7CiAgCiEg CQlzcWwgPSAiU0VMRUNUIG4ubnNwYWNsIGZyb20gcGdfbmFtZXNwYWNlIG4g V0hFUkUgbnNwbmFtZT0nIiArIGVzY2FwZVF1b3RlcyhzY2hlbWFOYW1lKSAr ICInICI7CiAgCQogIAkJUmVzdWx0U2V0IHJzID0gY29ubmVjdGlvbi5jcmVh dGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoc3FsKTsKICAJCQotLS0gMjc0 MSwyNzU4IC0tLS0KICAJcHVibGljIFJlc3VsdFNldCBnZXRTY2hlbWFQcml2 aWxlZ2VzKFN0cmluZyBzY2hlbWFOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9u IHsKICAJCVN0cmluZyBzcWw7CiAgCQkJCiEgCQlGaWVsZCBmW10gPSBuZXcg RmllbGRbNF07CiAgCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKICAKICAJ CQkKICAJCWZbMF0gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwgIkdSQU5URUUi LCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKICAJCWZbMV0g PSBuZXcgRmllbGQoY29ubmVjdGlvbiwgIlBSSVZJTEVHRSIsIGlWYXJjaGFy T2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZlsyXSA9IG5ldyBGaWVs ZChjb25uZWN0aW9uLCAiR1JBTlRPUiIsIGlWYXJjaGFyT2lkLCBnZXRNYXhO YW1lTGVuZ3RoKCkpOworIAkJZlszXSA9IG5ldyBGaWVsZChjb25uZWN0aW9u LCAiSVNfR1JBTlRBQkxFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5n dGgoKSk7CiAgCiEgCQlzcWwgPQkiU0VMRUNUIG4ubnNwYWNsLCB1LnVzZW5h bWUgZnJvbSBwZ19uYW1lc3BhY2UgbiwgcGdfdXNlciB1ICIgKyAKISAJCQkJ IiAgIFdIRVJFIG5zcG5hbWU9JyIgKyBlc2NhcGVRdW90ZXMoc2NoZW1hTmFt ZSkgKyAiJyBBTkQgIiArIAohIAkJCQkiICAgdS51c2VzeXNpZD1uLm5zcG93 bmVyIjsKICAJCiAgCQlSZXN1bHRTZXQgcnMgPSBjb25uZWN0aW9uLmNyZWF0 ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeShzcWwpOwogIAkJCioqKioqKioq KioqKioqKgoqKiogMjY5MSwyNjk2ICoqKioKLS0tIDI3NjIsMjc2OCAtLS0t CiAgCQkJLy9nZXQgdGhlIHZhbHVlcyBvZiBhcnJheSAKICAJCQkKICAJCQlT dHJpbmcgYWNsID0gcnMuZ2V0U3RyaW5nKDEpOworIAkJCVN0cmluZyBvd25l ciA9IHJzLmdldFN0cmluZygyKTsKICAJCQkKICAJCQkvL3BhcnNlIGFjbCBh cnJheSBhbmQgcHV0IGl0cyB2YWx1ZXMgaW50byBhIGhhc2h0YWJsZSB0aGF0 IGhhcyAKICAJCQkvL2tleXMgYXMgdGhlIHByaXZpbGVnZXMgbmFtZXMgYW5k IHZhbHVlcyBhcmUgdGhlIGdyYW50ZWUgb2YgdGhlIHByaXZpbGVnZXMKKioq KioqKioqKioqKioqCioqKiAyNzExLDI3MzIgKioqKgogIAkJCQlpKys7CiAg CQkJfQogIAkJCQogIAkJCS8vZm9yIGV2ZXJ5IHBlcm1pc3Npb24gZ2V0IHRo ZSB1c2VyIG9yIGdyb3VwIG5hbWUKICAJCQlmb3IgKGk9MDsgaTxwZXJtTmFt ZXMubGVuZ3RoOyBpKyspIHsKICAJCQkJYnl0ZVtdIHByaXZpbGVnZSA9IHBl cm1OYW1lc1tpXS5nZXRCeXRlcygpOwogIAkJCQlWZWN0b3IgZ3JhbnRlZXMg PSAoVmVjdG9yKXBlcm1pc3Npb25zLmdldChwZXJtTmFtZXNbaV0pOwogIAkJ CQlmb3IgKGludCBqPTA7IGo8Z3JhbnRlZXMuc2l6ZSgpOyBqKyspIHsKISAJ CQkJCVN0cmluZyBncmFudGVlID0gKFN0cmluZylncmFudGVlcy5lbGVtZW50 QXQoaik7CiEgCQkJCQlieXRlW11bXSB0dXBsZSA9IG5ldyBieXRlWzJdW107 CiAgCQkJCQl0dXBsZVswXSA9IGdyYW50ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJ CXR1cGxlWzFdID0gcHJpdmlsZWdlOwogIAkJCQkJdi5hZGRFbGVtZW50KHR1 cGxlKTsKICAJCQkJfQogIAkJCX0KICAJCQkJCiAgCQl9CiAgCQkJCiEgCQly ZXR1cm4gY29ubmVjdGlvbi5nZXRSZXN1bHRTZXQobnVsbCwgZiwgdiwgIk9L IiwgMSk7CQogIAl9CiAgCiAgCS8qKgotLS0gMjc4MywyODE2IC0tLS0KICAJ CQkJaSsrOwogIAkJCX0KICAJCQkKKyAJCQlBcnJheXMuc29ydChwZXJtTmFt ZXMpOwogIAkJCS8vZm9yIGV2ZXJ5IHBlcm1pc3Npb24gZ2V0IHRoZSB1c2Vy IG9yIGdyb3VwIG5hbWUKICAJCQlmb3IgKGk9MDsgaTxwZXJtTmFtZXMubGVu Z3RoOyBpKyspIHsKICAJCQkJYnl0ZVtdIHByaXZpbGVnZSA9IHBlcm1OYW1l c1tpXS5nZXRCeXRlcygpOwogIAkJCQlWZWN0b3IgZ3JhbnRlZXMgPSAoVmVj dG9yKXBlcm1pc3Npb25zLmdldChwZXJtTmFtZXNbaV0pOwogIAkJCQlmb3Ig KGludCBqPTA7IGo8Z3JhbnRlZXMuc2l6ZSgpOyBqKyspIHsKISAJCQkJCVN0 cmluZyBncmFudGVlID0gKFN0cmluZykoKFN0cmluZ1tdKWdyYW50ZWVzLmVs ZW1lbnRBdChqKSlbMF07CiEgCQkJCQlTdHJpbmcgZ3JhbnRvciA9IChTdHJp bmcpKChTdHJpbmdbXSlncmFudGVlcy5lbGVtZW50QXQoaikpWzFdOwohIAkJ CQkJZ3JhbnRvciA9IGdyYW50b3IuZXF1YWxzKCIiKSA/IG93bmVyIDogZ3Jh bnRvcjsKISAJCQkJCWJvb2xlYW4gaXNQcml2R3JhbnRhYmxlID0gKChTdHJp bmdbXSlncmFudGVlcy5lbGVtZW50QXQoaikpWzJdLmVxdWFscygidCIpOwoh IAohIAkJCQkJLy8gVGhlIGhhbmRsaW5nIG9mIHRoaXMgc2xpZ2h0bHkgZGlm ZmVycyBkdWUgdG8gZGlmZmVyZW5jZXMgCiEgCQkJCQkvLyBpbiA3LjMueCBh bmQgNy40KyBiYWNrZW5kcwohIAohIAkJCQkJU3RyaW5nIGdyYW50YWJsZSA9 IChpc1ByaXZHcmFudGFibGUgfHwgb3duZXIuZXF1YWxzKGdyYW50ZWUpKSA/ ICJZRVMiIDogIk5PIjsKISAKISAJCQkJCWJ5dGVbXVtdIHR1cGxlID0gbmV3 IGJ5dGVbNF1bXTsKICAJCQkJCXR1cGxlWzBdID0gZ3JhbnRlZS5nZXRCeXRl cygpOwogIAkJCQkJdHVwbGVbMV0gPSBwcml2aWxlZ2U7CisgCQkJCQl0dXBs ZVsyXSA9IGdyYW50b3IuZ2V0Qnl0ZXMoKTsKKyAJCQkJCXR1cGxlWzNdID0g Z3JhbnRhYmxlLmdldEJ5dGVzKCk7CiAgCQkJCQl2LmFkZEVsZW1lbnQodHVw bGUpOwogIAkJCQl9CiAgCQkJfQogIAkJCQkKICAJCX0KICAJCQkKISAJCXJl dHVybiAoUmVzdWx0U2V0KSAoKEJhc2VTdGF0ZW1lbnQpY29ubmVjdGlvbi5j cmVhdGVTdGF0ZW1lbnQoKSkuY3JlYXRlUmVzdWx0U2V0KGYsIHYsICJPSyIs IDEsIDAsIGZhbHNlKTsKICAJfQogIAogIAkvKioKKioqKioqKioqKioqKioq CioqKiAyODI0LDI4NDAgKioqKgogIAkJCiAgCQlTdHJpbmcgc3FsOwogIAkJ CQohIAkJRmllbGQgZltdID0gbmV3IEZpZWxkWzJdOwogIAkJVmVjdG9yIHYg PSBuZXcgVmVjdG9yKCk7CiAgCiAgCQkJCiAgCQlmWzBdID0gbmV3IEZpZWxk KGNvbm5lY3Rpb24sICJHUkFOVEVFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5h bWVMZW5ndGgoKSk7CiAgCQlmWzFdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24s ICJQUklWSUxFR0UiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgp KTsKICAKISAJCXNxbCA9ICJTRUxFQ1QgYy5yZWxhY2wgZnJvbSBwZ19jbGFz cyBjLCBwZ19uYW1lc3BhY2UgbiAiICsKICAJCQkiV0hFUkUgYy5yZWxuYW1l PSciICsgZXNjYXBlUXVvdGVzKHNlcXVlbmNlTmFtZSkgKyAiJyAiICsKICAJ CQkiQU5EIGMucmVsbmFtZXNwYWNlID0gbi5vaWQgIiArCiEgCQkJIkFORCBu Lm5zcG5hbWU9JyIgKyBlc2NhcGVRdW90ZXMoc2NoZW1hTmFtZSkgKyAiJyAi OwogIAkKICAJCVJlc3VsdFNldCBycyA9IGNvbm5lY3Rpb24uY3JlYXRlU3Rh dGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KHNxbCk7CiAgCQkKLS0tIDI5MDgsMjky NyAtLS0tCiAgCQkKICAJCVN0cmluZyBzcWw7CiAgCQkJCiEgCQlGaWVsZCBm W10gPSBuZXcgRmllbGRbNF07CiAgCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3Io KTsKICAKICAJCQkKICAJCWZbMF0gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwg IkdSQU5URUUiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsK ICAJCWZbMV0gPSBuZXcgRmllbGQoY29ubmVjdGlvbiwgIlBSSVZJTEVHRSIs IGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZlsyXSA9 IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRPUiIsIGlWYXJjaGFyT2lk LCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZlszXSA9IG5ldyBGaWVsZChj b25uZWN0aW9uLCAiSVNfR1JBTlRBQkxFIiwgaVZhcmNoYXJPaWQsIGdldE1h eE5hbWVMZW5ndGgoKSk7CiAgCiEgCQlzcWwgPSAiU0VMRUNUIGMucmVsYWNs LCB1LnVzZW5hbWUgZnJvbSBwZ19jbGFzcyBjLCBwZ19uYW1lc3BhY2Ugbiwg cGdfdXNlciB1ICIgKwogIAkJCSJXSEVSRSBjLnJlbG5hbWU9JyIgKyBlc2Nh cGVRdW90ZXMoc2VxdWVuY2VOYW1lKSArICInICIgKwogIAkJCSJBTkQgYy5y ZWxuYW1lc3BhY2UgPSBuLm9pZCAiICsKISAJCQkiQU5EIG4ubnNwbmFtZT0n IiArIGVzY2FwZVF1b3RlcyhzY2hlbWFOYW1lKSArICInICIgKwohIAkJCSJB TkQgdS51c2VzeXNpZD1jLnJlbG93bmVyIjsKICAJCiAgCQlSZXN1bHRTZXQg cnMgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVy eShzcWwpOwogIAkJCioqKioqKioqKioqKioqKgoqKiogMjg0NCwyODQ5ICoq KioKLS0tIDI5MzEsMjkzNyAtLS0tCiAgCQkJLy9nZXQgdGhlIHZhbHVlcyBv ZiBhcnJheSAKICAJCQkKICAJCQlTdHJpbmcgYWNsID0gcnMuZ2V0U3RyaW5n KDEpOworIAkJCVN0cmluZyBvd25lciA9IHJzLmdldFN0cmluZygyKTsKICAJ CQkKICAJCQkvL3BhcnNlIGFjbCBhcnJheSBhbmQgcHV0IGl0cyB2YWx1ZXMg aW50byBhIGhhc2h0YWJsZSB0aGF0IGhhcyAKICAJCQkvL2tleXMgYXMgdGhl IHByaXZpbGVnZXMgbmFtZXMgYW5kIHZhbHVlcyBhcmUgdGhlIGdyYW50ZWUg b2YgdGhlIHByaXZpbGVnZXMKKioqKioqKioqKioqKioqCioqKiAyODY0LDI4 ODYgKioqKgogIAkJCQlpKys7CiAgCQkJfQogIAkJCQogIAkJCS8vZm9yIGV2 ZXJ5IHBlcm1pc3Npb24gZ2V0IHRoZSB1c2VyIG9yIGdyb3VwIG5hbWUKICAJ CQlmb3IgKGk9MDsgaTxwZXJtTmFtZXMubGVuZ3RoOyBpKyspIHsKICAJCQkJ Ynl0ZVtdIHByaXZpbGVnZSA9IHBlcm1OYW1lc1tpXS5nZXRCeXRlcygpOwog IAkJCQlWZWN0b3IgZ3JhbnRlZXMgPSAoVmVjdG9yKXBlcm1pc3Npb25zLmdl dChwZXJtTmFtZXNbaV0pOwogIAkJCQlmb3IgKGludCBqPTA7IGo8Z3JhbnRl ZXMuc2l6ZSgpOyBqKyspIHsKISAJCQkJCVN0cmluZyBncmFudGVlID0gKFN0 cmluZylncmFudGVlcy5lbGVtZW50QXQoaik7CiEgCQkJCQlieXRlW11bXSB0 dXBsZSA9IG5ldyBieXRlWzJdW107CiAgCQkJCQl0dXBsZVswXSA9IGdyYW50 ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXR1cGxlWzFdID0gcHJpdmlsZWdlOwog IAkJCQkJdi5hZGRFbGVtZW50KHR1cGxlKTsKICAJCQkJfQogIAkJCX0KICAJ CQkJCiAgCQl9CiAgCQkJCiEgCQlyZXR1cm4gY29ubmVjdGlvbi5nZXRSZXN1 bHRTZXQobnVsbCwgZiwgdiwgIk9LIiwgMSk7CiEgCQkJCQogIAl9CiAgCQog IAkvKioKLS0tIDI5NTIsMjk4NSAtLS0tCiAgCQkJCWkrKzsKICAJCQl9CiAg CQkJCisgCQkJQXJyYXlzLnNvcnQocGVybU5hbWVzKTsKICAJCQkvL2ZvciBl dmVyeSBwZXJtaXNzaW9uIGdldCB0aGUgdXNlciBvciBncm91cCBuYW1lCiAg CQkJZm9yIChpPTA7IGk8cGVybU5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgCQkJ CWJ5dGVbXSBwcml2aWxlZ2UgPSBwZXJtTmFtZXNbaV0uZ2V0Qnl0ZXMoKTsK ICAJCQkJVmVjdG9yIGdyYW50ZWVzID0gKFZlY3RvcilwZXJtaXNzaW9ucy5n ZXQocGVybU5hbWVzW2ldKTsKICAJCQkJZm9yIChpbnQgaj0wOyBqPGdyYW50 ZWVzLnNpemUoKTsgaisrKSB7CiEgCQkJCQlTdHJpbmcgZ3JhbnRlZSA9IChT dHJpbmcpKChTdHJpbmdbXSlncmFudGVlcy5lbGVtZW50QXQoaikpWzBdOwoh IAkJCQkJU3RyaW5nIGdyYW50b3IgPSAoU3RyaW5nKSgoU3RyaW5nW10pZ3Jh bnRlZXMuZWxlbWVudEF0KGopKVsxXTsKISAJCQkJCWdyYW50b3IgPSBncmFu dG9yLmVxdWFscygiIikgPyBvd25lciA6IGdyYW50b3I7CiEgCQkJCQlib29s ZWFuIGlzUHJpdkdyYW50YWJsZSA9ICgoU3RyaW5nW10pZ3JhbnRlZXMuZWxl bWVudEF0KGopKVsyXS5lcXVhbHMoInQiKTsKISAKISAJCQkJCS8vIFRoZSBo YW5kbGluZyBvZiB0aGlzIHNsaWdodGx5IGRpZmZlcnMgZHVlIHRvIGRpZmZl cmVuY2VzIAohIAkJCQkJLy8gaW4gNy4zLnggYW5kIDcuNCsgYmFja2VuZHMK ISAKISAJCQkJCVN0cmluZyBncmFudGFibGUgPSAoaXNQcml2R3JhbnRhYmxl IHx8IG93bmVyLmVxdWFscyhncmFudGVlKSkgPyAiWUVTIiA6ICJOTyI7CiEg CiEgCQkJCQlieXRlW11bXSB0dXBsZSA9IG5ldyBieXRlWzRdW107CiAgCQkJ CQl0dXBsZVswXSA9IGdyYW50ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXR1cGxl WzFdID0gcHJpdmlsZWdlOworIAkJCQkJdHVwbGVbMl0gPSBncmFudG9yLmdl dEJ5dGVzKCk7CisgCQkJCQl0dXBsZVszXSA9IGdyYW50YWJsZS5nZXRCeXRl cygpOwogIAkJCQkJdi5hZGRFbGVtZW50KHR1cGxlKTsKICAJCQkJfQogIAkJ CX0KICAJCQkJCiAgCQl9CiAgCQkJCiEgCQlyZXR1cm4gKFJlc3VsdFNldCkg KChCYXNlU3RhdGVtZW50KWNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCkp LmNyZWF0ZVJlc3VsdFNldChmLCB2LCAiT0siLCAxLCAwLCBmYWxzZSk7CQkJ CQogIAl9CiAgCQogIAkvKioKKioqKioqKioqKioqKioqCioqKiAzMDcyLDMw NzcgKioqKgotLS0gMzE3MSwzMjg5IC0tLS0KICAJCXJldHVybiBjb25uZWN0 aW9uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeShzcWwpOwogIAl9 CiAgCisgCS8qCisgCSogR2V0IGEgZGVzY3JpcHRpb24gb2YgdGhlIGFjY2Vz cyByaWdodHMgZm9yIGVhY2ggdGFibGUgYXZhaWxhYmxlCisgCSogaW4gYSBj YXRhbG9nLgorIAkqCisgCSogVGhpcyBtZXRob2QgaXMgY3VycmVudGx5IHVu aW1wbGVtZW50ZWQuCisgCSoKKyAJKiA8UD5Pbmx5IHByaXZpbGVnZXMgbWF0 Y2hpbmcgdGhlIHNjaGVtYSBhbmQgdGFibGUgbmFtZQorIAkqIGNyaXRlcmlh IGFyZSByZXR1cm5lZC4gIFRoZXkgYXJlIG9yZGVyZWQgYnkgVEFCTEVfU0NI RU0sCisgCSogVEFCTEVfTkFNRSwgYW5kIFBSSVZJTEVHRS4KKyAJKgorIAkq IDxQPkVhY2ggcHJpdmlsaWdlIGRlc2NyaXB0aW9uIGhhcyB0aGUgZm9sbG93 aW5nIGNvbHVtbnM6CisgCSoJPE9MPgorIAkqCTxMST48Qj5UQUJMRV9DQVQ8 L0I+IFN0cmluZyA9PiB0YWJsZSBjYXRhbG9nIChtYXkgYmUgbnVsbCkKKyAJ Kgk8TEk+PEI+VEFCTEVfU0NIRU08L0I+IFN0cmluZyA9PiB0YWJsZSBzY2hl bWEgKG1heSBiZSBudWxsKQorIAkqCTxMST48Qj5UQUJMRV9OQU1FPC9CPiBT dHJpbmcgPT4gdGFibGUgbmFtZQorIAkqCTxMST48Qj5HUkFOVE9SPC9CPiA9 PiBncmFudG9yIG9mIGFjY2VzcyAobWF5IGJlIG51bGwpCisgCSoJPExJPjxC PkdSQU5URUU8L0I+IFN0cmluZyA9PiBncmFudGVlIG9mIGFjY2VzcworIAkq CTxMST48Qj5QUklWSUxFR0U8L0I+IFN0cmluZyA9PiBuYW1lIG9mIGFjY2Vz cyAoU0VMRUNULAorIAkqCQlJTlNFUlQsIFVQREFURSwgUkVGUkVOQ0VTLCAu Li4pCisgCSoJPExJPjxCPklTX0dSQU5UQUJMRTwvQj4gU3RyaW5nID0+ICJZ RVMiIGlmIGdyYW50ZWUgaXMgcGVybWl0dGVkCisgCSoJCXRvIGdyYW50IHRv IG90aGVyczsgIk5PIiBpZiBub3Q7IG51bGwgaWYgdW5rbm93bgorIAkqCTwv T0w+CisgCSoKKyAJKiBAcGFyYW0gY2F0YWxvZyBhIGNhdGFsb2cgbmFtZTsg IiIgcmV0cmlldmVzIHRob3NlIHdpdGhvdXQgYSBjYXRhbG9nCisgCSogQHBh cmFtIHNjaGVtYVBhdHRlcm4gYSBzY2hlbWEgbmFtZSBwYXR0ZXJuOyAiIiBy ZXRyaWV2ZXMgdGhvc2UKKyAJKiB3aXRob3V0IGEgc2NoZW1hCisgCSogQHBh cmFtIHRhYmxlTmFtZVBhdHRlcm4gYSB0YWJsZSBuYW1lIHBhdHRlcm4KKyAJ KiBAcmV0dXJuIFJlc3VsdFNldCBlYWNoIHJvdyBpcyBhIHRhYmxlIHByaXZp bGVnZSBkZXNjcmlwdGlvbgorIAkqIEBzZWUgI2dldFNlYXJjaFN0cmluZ0Vz Y2FwZQorIAkqLworIAlwdWJsaWMgamF2YS5zcWwuUmVzdWx0U2V0IGdldFRh YmxlUHJpdmlsZWdlcyhTdHJpbmcgY2F0YWxvZywgU3RyaW5nIHNjaGVtYVBh dHRlcm4sIFN0cmluZyB0YWJsZU5hbWVQYXR0ZXJuKSB0aHJvd3MgU1FMRXhj ZXB0aW9uCisgCXsKKyAJCUZpZWxkIGZbXSA9IG5ldyBGaWVsZFs3XTsKKyAJ CVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworIAorIAkJZlswXSA9IG5ldyBG aWVsZChjb25uZWN0aW9uLCAiVEFCTEVfQ0FUIiwgaVZhcmNoYXJPaWQsIGdl dE1heE5hbWVMZW5ndGgoKSk7CisgCQlmWzFdID0gbmV3IEZpZWxkKGNvbm5l Y3Rpb24sICJUQUJMRV9TQ0hFTSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1l TGVuZ3RoKCkpOworIAkJZlsyXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAi VEFCTEVfTkFNRSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkp OworIAkJZlszXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRPUiIs IGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZls0XSA9 IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRFRSIsIGlWYXJjaGFyT2lk LCBnZXRNYXhOYW1lTGVuZ3RoKCkpOworIAkJZls1XSA9IG5ldyBGaWVsZChj b25uZWN0aW9uLCAiUFJJVklMRUdFIiwgaVZhcmNoYXJPaWQsIGdldE1heE5h bWVMZW5ndGgoKSk7CisgCQlmWzZdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24s ICJJU19HUkFOVEFCTEUiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0 aCgpKTsKKyAKKyAJCVN0cmluZyBzcWw7CisgCQlpZiAoY29ubmVjdGlvbi5o YXZlTWluaW11bVNlcnZlclZlcnNpb24oIjcuMyIpKSB7CisgCQkJc3FsID0g IlNFTEVDVCBuLm5zcG5hbWUsYy5yZWxuYW1lLHUudXNlbmFtZSxjLnJlbGFj bCAiKworIAkJCQkiIEZST00gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2Ugbiwg cGdfY2F0YWxvZy5wZ19jbGFzcyBjLCBwZ19jYXRhbG9nLnBnX3VzZXIgdSAi KworIAkJCQkiIFdIRVJFIGMucmVsbmFtZXNwYWNlID0gbi5vaWQgIisKKyAJ CQkJIiBBTkQgdS51c2VzeXNpZCA9IGMucmVsb3duZXIgIisKKyAJCQkJIiBB TkQgYy5yZWxraW5kID0gJ3InICI7CisgCQkJaWYgKHNjaGVtYVBhdHRlcm4g IT0gbnVsbCAmJiAhIiIuZXF1YWxzKHNjaGVtYVBhdHRlcm4pKSB7CisgCQkJ CXNxbCArPSAiIEFORCBuLm5zcG5hbWUgTElLRSAnIitlc2NhcGVRdW90ZXMo c2NoZW1hUGF0dGVybikrIicgIjsKKyAJCQl9CisgCQl9IGVsc2UgeworIAkJ CXNxbCA9ICJTRUxFQ1QgTlVMTDo6dGV4dCBBUyBuc3BuYW1lLGMucmVsbmFt ZSx1LnVzZW5hbWUsYy5yZWxhY2wgIisKKyAJCQkJIkZST00gcGdfY2xhc3Mg YywgcGdfdXNlciB1ICIrCisgCQkJCSIgV0hFUkUgdS51c2VzeXNpZCA9IGMu cmVsb3duZXIgIisKKyAJCQkJIiBBTkQgYy5yZWxraW5kID0gJ3InICI7Cisg CQl9CisgCisgCQlpZiAodGFibGVOYW1lUGF0dGVybiAhPSBudWxsICYmICEi Ii5lcXVhbHModGFibGVOYW1lUGF0dGVybikpIHsKKyAJCQlzcWwgKz0gIiBB TkQgYy5yZWxuYW1lIExJS0UgJyIrZXNjYXBlUXVvdGVzKHRhYmxlTmFtZVBh dHRlcm4pKyInICI7CisgCQl9CisgCQlzcWwgKz0gIiBPUkRFUiBCWSBuc3Bu YW1lLCByZWxuYW1lICI7CisgCisgCQlSZXN1bHRTZXQgcnMgPSBjb25uZWN0 aW9uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeShzcWwpOworIAkJ d2hpbGUgKHJzLm5leHQoKSkgeworIAkJCWJ5dGUgc2NoZW1hW10gPSBycy5n ZXRCeXRlcygibnNwbmFtZSIpOworIAkJCWJ5dGUgdGFibGVbXSA9IHJzLmdl dEJ5dGVzKCJyZWxuYW1lIik7CisgCQkJU3RyaW5nIG93bmVyID0gcnMuZ2V0 U3RyaW5nKCJ1c2VuYW1lIik7CisgCQkJU3RyaW5nIGFjbCA9IHJzLmdldFN0 cmluZygicmVsYWNsIik7CisgCQkJSGFzaHRhYmxlIHBlcm1pc3Npb25zID0g cGFyc2VBQ0woYWNsLCBvd25lcik7CisgCQkJU3RyaW5nIHBlcm1OYW1lc1td ID0gbmV3IFN0cmluZ1twZXJtaXNzaW9ucy5zaXplKCldOworIAkJCUVudW1l cmF0aW9uIGUgPSBwZXJtaXNzaW9ucy5rZXlzKCk7CisgCQkJaW50IGk9MDsK KyAJCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworIAkJCQlwZXJt TmFtZXNbaSsrXSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworIAkJCX0K KyAJCQlBcnJheXMuc29ydChwZXJtTmFtZXMpOworIAkJCWZvciAoaT0wOyBp PHBlcm1OYW1lcy5sZW5ndGg7IGkrKykgeworIAkJCQlieXRlW10gcHJpdmls ZWdlID0gZW5jb2RpbmcuZW5jb2RlKHBlcm1OYW1lc1tpXSk7CisgCQkJCVZl Y3RvciBncmFudGVlcyA9IChWZWN0b3IpcGVybWlzc2lvbnMuZ2V0KHBlcm1O YW1lc1tpXSk7CisgCQkJCWZvciAoaW50IGo9MDsgajxncmFudGVlcy5zaXpl KCk7IGorKykgeworIAkJCQkJU3RyaW5nIGdyYW50ZWUgPSAoU3RyaW5nKSgo U3RyaW5nW10pZ3JhbnRlZXMuZWxlbWVudEF0KGopKVswXTsKKyAJCQkJCVN0 cmluZyBncmFudG9yID0gKFN0cmluZykoKFN0cmluZ1tdKWdyYW50ZWVzLmVs ZW1lbnRBdChqKSlbMV07CisgCQkJCQlncmFudG9yID0gZ3JhbnRvci5lcXVh bHMoIiIpID8gb3duZXIgOiBncmFudG9yOworIAkJCQkJYm9vbGVhbiBpc1By aXZHcmFudGFibGUgPSAoKFN0cmluZ1tdKWdyYW50ZWVzLmVsZW1lbnRBdChq KSlbMl0uZXF1YWxzKCJ0Iik7CisgCisgCQkJCQkvLyBzZWUgYmVsb3cgZm9y IGdyYW50ZWUgPT0gZ3JhbnRvciBjYXNlCisgCisgCQkJCQkvLyBUaGUgaGFu ZGxpbmcgb2YgdGhpcyBzbGlnaHRseSBkaWZmZXJzIGR1ZSB0byBkaWZmZXJl bmNlcyAKKyAJCQkJCS8vIGluIDcuMy54IGFuZCA3LjQrIGJhY2tlbmRzCisg CisgCQkJCQlTdHJpbmcgZ3JhbnRhYmxlID0gKGlzUHJpdkdyYW50YWJsZSB8 fCBvd25lci5lcXVhbHMoZ3JhbnRlZSkpID8gIllFUyIgOiAiTk8iOworIAor IAkJCQkJYnl0ZVtdW10gdHVwbGUgPSBuZXcgYnl0ZVs3XVtdOworIAkJCQkJ dHVwbGVbMF0gPSBudWxsOworIAkJCQkJdHVwbGVbMV0gPSBzY2hlbWE7Cisg CQkJCQl0dXBsZVsyXSA9IHRhYmxlOworIAkJCQkJdHVwbGVbM10gPSBlbmNv ZGluZy5lbmNvZGUoZ3JhbnRvcik7CisgCQkJCQl0dXBsZVs0XSA9IGVuY29k aW5nLmVuY29kZShncmFudGVlKTsKKyAJCQkJCXR1cGxlWzVdID0gcHJpdmls ZWdlOworIAkJCQkJdHVwbGVbNl0gPSBlbmNvZGluZy5lbmNvZGUoZ3JhbnRh YmxlKTsKKyAJCQkJCXYuYWRkRWxlbWVudCh0dXBsZSk7CisgCQkJCX0KKyAJ CQl9CisgCQl9CisgCisgCQlycy5jbG9zZSgpOworIAorIAkJcmV0dXJuIChS ZXN1bHRTZXQpICgoQmFzZVN0YXRlbWVudCljb25uZWN0aW9uLmNyZWF0ZVN0 YXRlbWVudCgpKS5jcmVhdGVSZXN1bHRTZXQoZiwgdiwgIk9LIiwgMSwgMCwg ZmFsc2UpOworIAl9CisgCQogIAkvKioKICAJICogUmV0dXJucyB0aGUgc3Vt bWFyeSBpbmZvIGZvciB0YWJsZXMKICAJICoKKioqKioqKioqKioqKioqCioq KiAzOTI5LDM5MzUgKioqKgogIAkgKi8KICAJCiAgCXB1YmxpYyBTdHJpbmdb XSBnZXRWYWxpZFNlcXVlbmNlUHJpdmlsZWdlcygpIHsKISAJCXJldHVybiBu ZXcgU3RyaW5nW10geyJTRUxFQ1QiLCAiVVBEQVRFIiwgIklOU0VSVCIsICJE RUxFVEUiLCAiUlVMRSIsICJSRUZFUkVOQ0VTIiwgIlRSSUdHRVIifTsKICAJ fQogIAkKICAJLyoqCi0tLSA0MTQxLDQxNDcgLS0tLQogIAkgKi8KICAJCiAg CXB1YmxpYyBTdHJpbmdbXSBnZXRWYWxpZFNlcXVlbmNlUHJpdmlsZWdlcygp IHsKISAJCXJldHVybiBuZXcgU3RyaW5nW10geyJERUxFVEUiLCAiSU5TRVJU IiwgIlJFRkVSRU5DRVMiLCAiUlVMRSIsICJTRUxFQ1QiLCAiVFJJR0dFUiIs ICJVUERBVEUiIH07CiAgCX0KICAJCiAgCS8qKgoqKioqKioqKioqKioqKioK KioqIDM5MzksMzk0NSAqKioqCiAgCSAqLwogIAkKICAJcHVibGljIFN0cmlu Z1tdIGdldFZhbGlkVGFibGVQcml2aWxlZ2VzKCkgewohIAkJcmV0dXJuIG5l dyBTdHJpbmdbXSB7IlNFTEVDVCIsICJVUERBVEUiLCAiSU5TRVJUIiwgIkRF TEVURSIsICJSVUxFIiwgIlJFRkVSRU5DRVMiLCAiVFJJR0dFUiJ9OwogIAl9 CiAgCQogIAkvKioKLS0tIDQxNTEsNDE1NyAtLS0tCiAgCSAqLwogIAkKICAJ cHVibGljIFN0cmluZ1tdIGdldFZhbGlkVGFibGVQcml2aWxlZ2VzKCkgewoh IAkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IkRFTEVURSIsICJJTlNFUlQiLCAi UkVGRVJFTkNFUyIsICJSVUxFIiwgIlNFTEVDVCIsICJUUklHR0VSIiwgIlVQ REFURSIgfTsKICAJfQogIAkKICAJLyoqCioqKioqKioqKioqKioqKgoqKiog Mzk0OSwzOTU1ICoqKioKICAJICovCiAgCQogIAlwdWJsaWMgU3RyaW5nW10g Z2V0VmFsaWRWaWV3UHJpdmlsZWdlcygpIHsKISAJCXJldHVybiBuZXcgU3Ry aW5nW10geyJTRUxFQ1QiLCAiVVBEQVRFIiwgIklOU0VSVCIsICJERUxFVEUi LCAiUlVMRSIsICJSRUZFUkVOQ0VTIiwgIlRSSUdHRVIifTsKICAJfQogIAkK ICAJLyoqCi0tLSA0MTYxLDQxNjcgLS0tLQogIAkgKi8KICAJCiAgCXB1Ymxp YyBTdHJpbmdbXSBnZXRWYWxpZFZpZXdQcml2aWxlZ2VzKCkgewohIAkJcmV0 dXJuIG5ldyBTdHJpbmdbXSB7IkRFTEVURSIsICJJTlNFUlQiLCAiUkVGRVJF TkNFUyIsICJSVUxFIiwgIlNFTEVDVCIsICJUUklHR0VSIiwgIlVQREFURSIg fTsKICAJfQogIAkKICAJLyoqCioqKioqKioqKioqKioqKgoqKiogNDExMiw0 MTI4ICoqKioKICAJCQogIAkJU3RyaW5nIHNxbDsKICAJCQkKISAJCUZpZWxk IGZbXSA9IG5ldyBGaWVsZFsyXTsKICAJCVZlY3RvciB2ID0gbmV3IFZlY3Rv cigpOwogIAogIAkJCQogIAkJZlswXSA9IG5ldyBGaWVsZChjb25uZWN0aW9u LCAiR1JBTlRFRSIsIGlWYXJjaGFyT2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkp OwogIAkJZlsxXSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiUFJJVklMRUdF IiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgoKSk7CiAgCiEgCQlz cWwgPSAiU0VMRUNUIGMucmVsYWNsIGZyb20gcGdfY2xhc3MgYywgcGdfbmFt ZXNwYWNlIG4gIiArCiAgCQkJIldIRVJFIGMucmVsbmFtZT0nIiArIGVzY2Fw ZVF1b3RlcyhuYW1lKSArICInICIgKwogIAkJCSJBTkQgYy5yZWxuYW1lc3Bh Y2UgPSBuLm9pZCAiICsKISAJCQkiQU5EIG4ubnNwbmFtZT0nIiArIGVzY2Fw ZVF1b3RlcyhzY2hlbWFOYW1lKSArICInICI7CiAgCQogIAkJUmVzdWx0U2V0 IHJzID0gY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVl cnkoc3FsKTsKICAJCQotLS0gNDMyNCw0MzQzIC0tLS0KICAJCQogIAkJU3Ry aW5nIHNxbDsKICAJCQkKISAJCUZpZWxkIGZbXSA9IG5ldyBGaWVsZFs0XTsK ICAJCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwogIAogIAkJCQogIAkJZlsw XSA9IG5ldyBGaWVsZChjb25uZWN0aW9uLCAiR1JBTlRFRSIsIGlWYXJjaGFy T2lkLCBnZXRNYXhOYW1lTGVuZ3RoKCkpOwogIAkJZlsxXSA9IG5ldyBGaWVs ZChjb25uZWN0aW9uLCAiUFJJVklMRUdFIiwgaVZhcmNoYXJPaWQsIGdldE1h eE5hbWVMZW5ndGgoKSk7CisgCQlmWzJdID0gbmV3IEZpZWxkKGNvbm5lY3Rp b24sICJHUkFOVE9SIiwgaVZhcmNoYXJPaWQsIGdldE1heE5hbWVMZW5ndGgo KSk7CisgCQlmWzNdID0gbmV3IEZpZWxkKGNvbm5lY3Rpb24sICJJU19HUkFO VEFCTEUiLCBpVmFyY2hhck9pZCwgZ2V0TWF4TmFtZUxlbmd0aCgpKTsKICAK ISAJCXNxbCA9ICJTRUxFQ1QgYy5yZWxhY2wsIHUudXNlbmFtZSBmcm9tIHBn X2NsYXNzIGMsIHBnX25hbWVzcGFjZSBuLCBwZ191c2VyIHUgIiArCiAgCQkJ IldIRVJFIGMucmVsbmFtZT0nIiArIGVzY2FwZVF1b3RlcyhuYW1lKSArICIn ICIgKwogIAkJCSJBTkQgYy5yZWxuYW1lc3BhY2UgPSBuLm9pZCAiICsKISAJ CQkiQU5EIG4ubnNwbmFtZT0nIiArIGVzY2FwZVF1b3RlcyhzY2hlbWFOYW1l KSArICInICIgKwohIAkJCSJBTkQgdS51c2VzeXNpZD1jLnJlbG93bmVyIjsK ICAJCiAgCQlSZXN1bHRTZXQgcnMgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRl bWVudCgpLmV4ZWN1dGVRdWVyeShzcWwpOwogIAkJCioqKioqKioqKioqKioq KgoqKiogNDEzMiw0MTM3ICoqKioKLS0tIDQzNDcsNDM1MyAtLS0tCiAgCQkJ Ly9nZXQgdGhlIHZhbHVlcyBvZiBhcnJheSAKICAJCQkKICAJCQlTdHJpbmcg YWNsID0gcnMuZ2V0U3RyaW5nKDEpOworIAkJCVN0cmluZyBvd25lciA9IHJz LmdldFN0cmluZygyKTsKICAJCQkKICAJCQkvL3BhcnNlIGFjbCBhcnJheSBh bmQgcHV0IGl0cyB2YWx1ZXMgaW50byBhIGhhc2h0YWJsZSB0aGF0IGhhcyAK ICAJCQkvL2tleXMgYXMgdGhlIHByaXZpbGVnZXMgbmFtZXMgYW5kIHZhbHVl cyBhcmUgdGhlIGdyYW50ZWUgb2YgdGhlIHByaXZpbGVnZXMKKioqKioqKioq KioqKioqCioqKiA0MTUyLDQxNzQgKioqKgogIAkJCQlpKys7CiAgCQkJfQog IAkJCQogIAkJCS8vZm9yIGV2ZXJ5IHBlcm1pc3Npb24gZ2V0IHRoZSB1c2Vy IG9yIGdyb3VwIG5hbWUKICAJCQlmb3IgKGk9MDsgaTxwZXJtTmFtZXMubGVu Z3RoOyBpKyspIHsKICAJCQkJYnl0ZVtdIHByaXZpbGVnZSA9IHBlcm1OYW1l c1tpXS5nZXRCeXRlcygpOwogIAkJCQlWZWN0b3IgZ3JhbnRlZXMgPSAoVmVj dG9yKXBlcm1pc3Npb25zLmdldChwZXJtTmFtZXNbaV0pOwogIAkJCQlmb3Ig KGludCBqPTA7IGo8Z3JhbnRlZXMuc2l6ZSgpOyBqKyspIHsKISAJCQkJCVN0 cmluZyBncmFudGVlID0gKFN0cmluZylncmFudGVlcy5lbGVtZW50QXQoaik7 CiEgCQkJCQlieXRlW11bXSB0dXBsZSA9IG5ldyBieXRlWzJdW107CiAgCQkJ CQl0dXBsZVswXSA9IGdyYW50ZWUuZ2V0Qnl0ZXMoKTsKICAJCQkJCXR1cGxl WzFdID0gcHJpdmlsZWdlOwogIAkJCQkJdi5hZGRFbGVtZW50KHR1cGxlKTsK ICAJCQkJfQogIAkJCX0KICAJCQkJCiAgCQl9CiAgCQkJCiEgCQlyZXR1cm4g Y29ubmVjdGlvbi5nZXRSZXN1bHRTZXQobnVsbCwgZiwgdiwgIk9LIiwgMSk7 CiEgCQkJCQogIAl9CiAgCQogIAkvKioKLS0tIDQzNjgsNDQwMSAtLS0tCiAg CQkJCWkrKzsKICAJCQl9CiAgCQkJCisgCQkJQXJyYXlzLnNvcnQocGVybU5h bWVzKTsKICAJCQkvL2ZvciBldmVyeSBwZXJtaXNzaW9uIGdldCB0aGUgdXNl ciBvciBncm91cCBuYW1lCiAgCQkJZm9yIChpPTA7IGk8cGVybU5hbWVzLmxl bmd0aDsgaSsrKSB7CiAgCQkJCWJ5dGVbXSBwcml2aWxlZ2UgPSBwZXJtTmFt ZXNbaV0uZ2V0Qnl0ZXMoKTsKICAJCQkJVmVjdG9yIGdyYW50ZWVzID0gKFZl Y3RvcilwZXJtaXNzaW9ucy5nZXQocGVybU5hbWVzW2ldKTsKICAJCQkJZm9y IChpbnQgaj0wOyBqPGdyYW50ZWVzLnNpemUoKTsgaisrKSB7CiEgCQkJCQlT dHJpbmcgZ3JhbnRlZSA9IChTdHJpbmcpKChTdHJpbmdbXSlncmFudGVlcy5l bGVtZW50QXQoaikpWzBdOwohIAkJCQkJU3RyaW5nIGdyYW50b3IgPSAoU3Ry aW5nKSgoU3RyaW5nW10pZ3JhbnRlZXMuZWxlbWVudEF0KGopKVsxXTsKISAJ CQkJCWdyYW50b3IgPSBncmFudG9yLmVxdWFscygiIikgPyBvd25lciA6IGdy YW50b3I7CiEgCQkJCQlib29sZWFuIGlzUHJpdkdyYW50YWJsZSA9ICgoU3Ry aW5nW10pZ3JhbnRlZXMuZWxlbWVudEF0KGopKVsyXS5lcXVhbHMoInQiKTsK ISAKISAJCQkJCS8vIFRoZSBoYW5kbGluZyBvZiB0aGlzIHNsaWdodGx5IGRp ZmZlcnMgZHVlIHRvIGRpZmZlcmVuY2VzIAohIAkJCQkJLy8gaW4gNy4zLngg YW5kIDcuNCsgYmFja2VuZHMKISAKISAJCQkJCVN0cmluZyBncmFudGFibGUg PSAoaXNQcml2R3JhbnRhYmxlIHx8IG93bmVyLmVxdWFscyhncmFudGVlKSkg PyAiWUVTIiA6ICJOTyI7CiEgCiEgCQkJCQlieXRlW11bXSB0dXBsZSA9IG5l dyBieXRlWzRdW107CiAgCQkJCQl0dXBsZVswXSA9IGdyYW50ZWUuZ2V0Qnl0 ZXMoKTsKICAJCQkJCXR1cGxlWzFdID0gcHJpdmlsZWdlOworIAkJCQkJdHVw bGVbMl0gPSBncmFudG9yLmdldEJ5dGVzKCk7CisgCQkJCQl0dXBsZVszXSA9 IGdyYW50YWJsZS5nZXRCeXRlcygpOwogIAkJCQkJdi5hZGRFbGVtZW50KHR1 cGxlKTsKICAJCQkJfQogIAkJCX0KICAJCQkJCiAgCQl9CiAgCQkJCiEgCQly ZXR1cm4gKFJlc3VsdFNldCkgKChCYXNlU3RhdGVtZW50KWNvbm5lY3Rpb24u Y3JlYXRlU3RhdGVtZW50KCkpLmNyZWF0ZVJlc3VsdFNldChmLCB2LCAiT0si LCAxLCAwLCBmYWxzZSk7CQkJCQogIAl9CiAgCQogIAkvKioKKioqKioqKioq KioqKioqCioqKiA0MjY1LDQyNzMgKioqKgogIAkJCiAgCQlyZXR1cm4gcnMu Z2V0T2JqZWN0KDEpLmVxdWFscygib24iKTsKICAJfQohIAkJCQkJCQkJCQkJ ICAgIAkJCSAgICAgICAgCQohIH0KICAKICAKICAKICAKLS0tIDQ0OTIsNDcy NiAtLS0tCiAgCQkKICAJCXJldHVybiBycy5nZXRPYmplY3QoMSkuZXF1YWxz KCJvbiIpOwogIAl9CiEgCQohIAkvKioqKioqKiBIZWxwZXIgZnVuY3Rpb25z ICoqKioqKiovCiEgCQohIAkvKioKISAJICogQnJlYWsgZG93biB0aGUgQUNM IHN0cmluZyBpbnRvIGl0J3MgY29tcG9uZW50cy4KISAJICoKISAJICogQHBh cmFtIGFjbFN0cmluZyBUaGUgQUNMIFN0cmluZyB0byBicmVha2Rvd24uCiEg CSAqIEByZXR1cm4gQSA8Y29kZT5TdHJpbmc8L2NvZGU+IGFycmF5IGNvbnRh aW5pbmcgdGhlIGNvbXBvbmVudHMgb2YgdGhlIEFDTCBzdHJpbmcuCiEgCSAq LwohIAkKISAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0QUNMQ29tcG9u ZW50cyhTdHJpbmcgYWNsU3RyaW5nKSB7CiEgCQkKISAJCQohIAkJaWYgKGFj bFN0cmluZy5zdGFydHNXaXRoKCJcIiIpICYmIGFjbFN0cmluZy5lbmRzV2l0 aCgiXCIiKSkgewohIAkJCWFjbFN0cmluZyA9IGFjbFN0cmluZy5zdWJzdHJp bmcoMSxhY2xTdHJpbmcubGVuZ3RoKCktMSk7CiEgCQl9CiEgCQkKISAJCWJv b2xlYW4gcGVybWlzc2lvbnNQcm9jZXNzZWQgPSBmYWxzZTsKISAJCWJvb2xl YW4gcGFzc2VkRXF1YWxTaWduID0gZmFsc2U7CiEgCQlTdHJpbmdbXSBhY2xD b21wb25lbnRzID0geyIiLCAiIiwgIiJ9OwohIAkJCiEgCQlib29sZWFuIGlu UXVvdGVzID0gZmFsc2U7CiEgCQkvLyBzdGFydCBhdCAxIGJlY2F1c2Ugb2Yg bGVhZGluZyAieyIKISAJCWludCBiZWdpbkluZGV4ID0gMDsKISAJCWNoYXIg cHJldkNoYXIgPSAnICc7CiEgCQkKISAJCWZvciAoaW50IGk9YmVnaW5JbmRl eDsgaTxhY2xTdHJpbmcubGVuZ3RoKCk7IGkrKykgewohIAkJCQohIAkJCWNo YXIgYyA9IGFjbFN0cmluZy5jaGFyQXQoaSk7CiEgCQkJCiEgCQkJLy8gV2Ug YXJlIGluIHF1b3RlcyBpZiB0aGlzIGNoYXIgaXMgYSBkb3VibGUgcXVvdGUg YW5kIHRoZQohIAkJCS8vIHByZXZpb3VzIElTIGFuIGVzY2FwZQohIAkJCQoh IAkJCWlmIChjID09ICciJyAmJiBwcmV2Q2hhciA9PSAnXFwnKSB7CiEgCQkJ CWluUXVvdGVzID0gIWluUXVvdGVzOwohIAkJCX0gZWxzZSBpZiAoYyA9PSAn PScgJiYgIWluUXVvdGVzKSB7CiEgCQkJCQohIAkJCQkvLyAnPScgYW5kIG5v dCBpbiBxdW90ZXMgPT4gR1JBTlRPUiBlbmRzIGhlcmUKISAJCQkJCiEgCQkJ CWFjbENvbXBvbmVudHNbMF09YWNsU3RyaW5nLnN1YnN0cmluZyhiZWdpbklu ZGV4LCBpKTsKISAJCQkJCiEgCQkJCWJlZ2luSW5kZXggPSBpKzE7CiEgCQkJ CQohIAkJCQlwYXNzZWRFcXVhbFNpZ24gPSB0cnVlOwohIAkJCQkKISAJCQl9 IGVsc2UgaWYgKGMgPT0gJy8nICYmICFpblF1b3RlcyAmJiBwYXNzZWRFcXVh bFNpZ24pIHsKISAJCQkJCiEgCQkJCS8vICcvJyBhbmQgbm90IGluIHF1b3Rl cyBBTkQgZXF1YWwgc2lnbiBwYXNzZWQgPT4KISAJCQkJLy8gcGVybWlzc2lv bnMgZW5kIGhlcmUuCiEgCQkJCQohIAkJCQkvLyBXZSBuZWVkIGEgY2hlY2sg Zm9yIGVxdWFsIHNpZ24gcGFzc2VkIGJlY2F1c2UgaW4gNy4zCiEgCQkJCS8v IGFuZCBsb3dlciwgdXNlciBuYW1lcyB3aXRoICI9IiBhcmUgaW4gcXVvdGVz LCBidXQKISAJCQkJLy8gdXNlciBuYW1lcyB3aXRoICIvIiBhcmVuJ3QsIHdo aWNoIHdpbGwgY2F1c2UgYSBjaGVjawohIAkJCQkvLyB3aXRob3V0ICdwYXNz ZWRFcXVhbFNpZ24nIHRvIGdvIHRocm91Z2gsIGV2ZW4gdGhvdWdoIGl0CiEg CQkJCS8vIGlzIHdyb25nIQohIAkJCQkKISAJCQkJYWNsQ29tcG9uZW50c1sx XT1hY2xTdHJpbmcuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGkpOwohIAkJCQkK ISAJCQkJYmVnaW5JbmRleCA9IGkrMTsKISAJCQkJCiEgCQkJCXBlcm1pc3Np b25zUHJvY2Vzc2VkID0gdHJ1ZTsKISAJCQkJCiEgCQkJfSBlbHNlIGlmIChp ID09IGFjbFN0cmluZy5sZW5ndGgoKS0xKSB7CiEgCQkJCQohIAkJCQkvLyBJ ZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBlbmNvdW50ZXJlZCwg dGhpcyBpcwohIAkJCQkvLyB0aGUgZ3JhbnRvciAoNy40KykuLiBlbHNlIGl0 J3MgcGVybWlzc2lvbnMgKDcuMy0pCiEgCQkJCQohIAkJCQlpZiAocGVybWlz c2lvbnNQcm9jZXNzZWQpIHsKISAJCQkJCWFjbENvbXBvbmVudHNbMl09YWNs U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4KTsKISAJCQkJfSBlbHNlIHsK ISAJCQkJCWFjbENvbXBvbmVudHNbMV09YWNsU3RyaW5nLnN1YnN0cmluZyhi ZWdpbkluZGV4KTsKISAJCQkJCQohIAkJCQkJLy8gR1JBTlRPUiB1bmtub3du Li4gbW9zdCBsaWtlbHkgbWVhbnMgb3duZXIgaXMKISAJCQkJCS8vIGdyYW50 b3IuLiBidXQgbGV0IGNhbGxlciBtYWtlIHRoYXQgZGVjaXNpb24KISAJCQkJ CQohIAkJCQkJYWNsQ29tcG9uZW50c1syXSA9ICIiOwohIAkJCQl9CiEgCQkJ CQohIAkJCX0KISAJCQkKISAJCQlwcmV2Q2hhciA9IGM7CiEgCQl9CiEgCQkK ISAJCXJldHVybiBhY2xDb21wb25lbnRzOwohIAkJCiEgCX0KISAJCiEgCS8q KgohIAkgKiBQYXJzZSBhbiBTdHJpbmcgb2YgQUNMcyBpbnRvIGEgVmVjdG9y IG9mIEFDTHMuCiEgCSAqLwohIAlwcml2YXRlIHN0YXRpYyBWZWN0b3IgcGFy c2VBQ0xBcnJheShTdHJpbmcgYWNsU3RyaW5nKSB7CiEgCQlWZWN0b3IgYWNs cyA9IG5ldyBWZWN0b3IoKTsKISAJCWlmIChhY2xTdHJpbmcgPT0gbnVsbCB8 fCBhY2xTdHJpbmcubGVuZ3RoKCkgPT0gMCkgewohIAkJCXJldHVybiBhY2xz OwohIAkJfQohIAkJYm9vbGVhbiBpblF1b3RlcyA9IGZhbHNlOwohIAkJLy8g c3RhcnQgYXQgMSBiZWNhdXNlIG9mIGxlYWRpbmcgInsiCiEgCQlpbnQgYmVn aW5JbmRleCA9IDE7CiEgCQljaGFyIHByZXZDaGFyID0gJyAnOwohIAkJZm9y IChpbnQgaT1iZWdpbkluZGV4OyBpPGFjbFN0cmluZy5sZW5ndGgoKTsgaSsr KSB7CiEgCQkJCiEgCQkJY2hhciBjID0gYWNsU3RyaW5nLmNoYXJBdChpKTsK ISAJCQlpZiAoYyA9PSAnIicgJiYgcHJldkNoYXIgIT0gJ1xcJykgewohIAkJ CQlpblF1b3RlcyA9ICFpblF1b3RlczsKISAJCQl9IGVsc2UgaWYgKGMgPT0g JywnICYmICFpblF1b3RlcykgewohIAkJCQlhY2xzLmFkZEVsZW1lbnQoYWNs U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LGkpKTsKISAJCQkJYmVnaW5J bmRleCA9IGkrMTsKISAJCQl9CiEgCQkJcHJldkNoYXIgPSBjOwohIAkJfQoh IAkJLy8gYWRkIGxhc3QgZWxlbWVudCByZW1vdmluZyB0aGUgdHJhaWxpbmcg In0iCiEgCQlhY2xzLmFkZEVsZW1lbnQoYWNsU3RyaW5nLnN1YnN0cmluZyhi ZWdpbkluZGV4LGFjbFN0cmluZy5sZW5ndGgoKS0xKSk7CiEgCQkKISAJCS8v IFN0cmlwIG91dCBlbmNsb3NpbmcgcXVvdGVzLCBpZiBhbnkuCiEgCQlmb3Ig KGludCBpPTA7IGk8YWNscy5zaXplKCk7IGkrKykgewohIAkJCVN0cmluZyBh Y2wgPSAoU3RyaW5nKWFjbHMuZWxlbWVudEF0KGkpOwohIAkJCWlmIChhY2wu c3RhcnRzV2l0aCgiXCIiKSAmJiBhY2wuZW5kc1dpdGgoIlwiIikpIHsKISAJ CQkJYWNsID0gYWNsLnN1YnN0cmluZygxLGFjbC5sZW5ndGgoKS0xKTsKISAJ CQkJYWNscy5zZXRFbGVtZW50QXQoYWNsLGkpOwohIAkJCX0KISAJCX0KISAJ CXJldHVybiBhY2xzOwohIAl9CiEgCQohIAkvKioKISAJICogQWRkIHRoZSB1 c2VyIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gYWNsIHRvIHRoZSBWZWN0b3Jz IG9mIHVzZXJzCiEgCSAqIHdpdGggdGhlIHByaXZpbGVnZXMgZGVzY3JpYmVk IGJ5IHRoZSBhY2wuCiEgCSAqLwohIAkKISAJcHJpdmF0ZSBzdGF0aWMgdm9p ZCBhZGRBQ0xQcml2aWxlZ2VzKGJvb2xlYW4gaGF2ZU1pbjc0LCBTdHJpbmcg YWNsLCBIYXNodGFibGUgcHJpdmlsZWdlcykgewohIAkJCiEgCQlTdHJpbmcg bmFtZSwgcHJpdnMsIGdyYW50b3I7CiEgCQkKISAJCWlmIChoYXZlTWluNzQp IHsKISAJCQlTdHJpbmdbXSBhY2xDb21wID0gZ2V0QUNMQ29tcG9uZW50cyhh Y2wpOwohIAkJCW5hbWUgPSBhY2xDb21wWzBdOwohIAkJCXByaXZzID0gYWNs Q29tcFsxXTsKISAJCQlncmFudG9yID0gYWNsQ29tcFsyXTsKISAJCX0gZWxz ZSB7CiEgCQkJaW50IGVxdWFsSW5kZXggPSBhY2wubGFzdEluZGV4T2YoIj0i KTsKISAJCQluYW1lID0gYWNsLnN1YnN0cmluZygwLGVxdWFsSW5kZXgpOwoh IAkJCXByaXZzID0gYWNsLnN1YnN0cmluZyhlcXVhbEluZGV4KzEpOwohIAkJ CWdyYW50b3IgPSAiIjsKISAJCX0KISAKISAJCS8vIG5hbWUgPT0gZ3JhbnRv ciBpcyBza2lwcGVkLCBiZWNhdXNlIGluIHN1Y2ggY2FzZXMsIHdlIGFyZSBy ZWZlcmluZyAKISAJCS8vIHRvIG93bmVyLCB3aG8gYWx3YXlzIGhhcyBBTEwg cHJpdmlsZWdlcy4gVGhpcyByZXR1cm4gaGVyZSBzZWVtcyAKISAJCS8vIHVu bmVjZXNzYXJ5LCBidXQgaXQgaW5mYWN0IHJlcXVpcmVkIGR1ZSB0byBhIGJ1 ZyBpbiAoYXRsZWFzdCB1cHRvKSAKISAJCS8vIDcuNC4yIHdoaWNoIGFsbG93 cyBhIHByaXZpbGVnZSB0byBiZSByZXZva2VkIGZyb20gYW4gb3duZXIsIGJ1 dCBub3QgCiEgCQkvLyBpdHMgZ3JhbnRhYmxlIHByb3BlcnR5LiBTbyB3ZSBj b3VsZCBlbmQgdXAgd2l0aCBhbiBBQ0wgbGlrZSAKISAJCS8vICJhKip3Ki4u Ii4gVW50aWwgdGhlIHByb2JsZW0gaXMgZml4ZWQsIHdlIGdpdmUgb3duZXIg QUxMIHByaXZpbGVnZXMsCiEgCQkvLyB3aGV0aGVyIG9yIG5vdCB0aGUgQUNM IHNheXMgc28uIFRoaXMgaXMgcmVxdWlyZWQgYW55d2F5cyBzaW5jZSAKISAJ CS8vIGFjY29yZGluZyB0byB0aGUgSkRCQyBzdGFuZGFyZCwgcmV0dXJuIGZv cm1hdCBmb3IgZ2V0VGFibGVQcnZpbGVnZXMoKQohIAkJLy8gcHJvdmlkZXMg bm8gd2F5IHRvIHNwZWNpZnkgR1JBTlRPUiBwZXJtaXNzaW9uIGZvciBzb21l IHBlcm1pc3Npb24gCiEgCQkvLyAiWCIsIGJ1dCBub3QgdGhlIHBlcm1pc3Np b24gIlgiIGl0c2VsZi4KISAKISAJCS8vaWYgKG5hbWUuZXF1YWxzKGdyYW50 b3IpKQohIAkJLy8JcmV0dXJuOwohIAohIAkJaWYgKG5hbWUubGVuZ3RoKCkg PT0gMCkgewohIAkJCW5hbWUgPSAiUFVCTElDIjsKISAJCX0KISAJCQohIAkJ Zm9yIChpbnQgaT0wOyBpPHByaXZzLmxlbmd0aCgpOyBpKyspIHsKISAJCQlT dHJpbmcgaGFzR3JhbnRvclByaXYgPSAiZiI7CiEgCQkJY2hhciBjID0gcHJp dnMuY2hhckF0KGkpOwohIAkJCWNoYXIgbmV4dCA9ICcgJzsKISAJCQlpZiAo aTwocHJpdnMubGVuZ3RoKCkgLSAxKSkgewohIAkJCQluZXh0ID0gcHJpdnMu Y2hhckF0KGkrMSk7CiEgCQkJfQohIAkJCVN0cmluZyBzcWxwcml2OwohIAkJ CXN3aXRjaCAoYykgewohIAkJCQljYXNlICdhJzogc3FscHJpdiA9ICJJTlNF UlQiOyBicmVhazsKISAJCQkJY2FzZSAncic6IHNxbHByaXYgPSAiU0VMRUNU IjsgYnJlYWs7CiEgCQkJCWNhc2UgJ3cnOiBzcWxwcml2ID0gIlVQREFURSI7 IGJyZWFrOwohIAkJCQljYXNlICdkJzogc3FscHJpdiA9ICJERUxFVEUiOyBi cmVhazsKISAJCQkJY2FzZSAnUic6IHNxbHByaXYgPSAiUlVMRSI7IGJyZWFr OwohIAkJCQljYXNlICd4Jzogc3FscHJpdiA9ICJSRUZFUkVOQ0VTIjsgYnJl YWs7CiEgCQkJCWNhc2UgJ3QnOiBzcWxwcml2ID0gIlRSSUdHRVIiOyBicmVh azsKISAJCQkJLy8gdGhlIGZvbGxvd2luZyBjYW4ndCBiZSBncmFudGVkIHRv IGEgdGFibGUsIGJ1dAohIAkJCQkvLyB3ZSdsbCBrZWVwIHRoZW0gZm9yIGNv bXBsZXRlbmVzcy4KISAJCQkJY2FzZSAnWCc6IHNxbHByaXYgPSAiRVhFQ1VU RSI7IGJyZWFrOwohIAkJCQljYXNlICdVJzogc3FscHJpdiA9ICJVU0FHRSI7 IGJyZWFrOwohIAkJCQljYXNlICdDJzogc3FscHJpdiA9ICJDUkVBVEUiOyBi cmVhazsKISAJCQkJY2FzZSAnVCc6IHNxbHByaXYgPSAiQ1JFQVRFIFRFTVAi OyBicmVhazsKISAJCQkJY2FzZSAnKic6IGlmIChuYW1lLmVxdWFscyhncmFu dG9yKSkgY29udGludWU7CiEgCQkJCWRlZmF1bHQ6IHNxbHByaXYgPSAiVU5L Tk9XTiI7CiEgCQkJfQohIAohIAkJCS8qIE5lZWQgdG8gaGFuZGxlIGNhc2Ug d2hlcmUgd2UgY2FuIGhhdmUgb3duZXIgd2l0aAohIAkJCSAqIEdSQU5UT1Ig cHJpdmlsZWdlLCBidXQgbm90IHRoZSBwcml2aWxlZ2UgaXRzZWxmLi4gdGhp cwohIAkJCSAqIHNlZW1zIGxpa2UgYSBidWcgaW4gdGhlIGJhY2tlbmQgKi8K ISAJCQkKISAJCQlpZiAobmV4dCA9PSAnKicpIHsKISAJCQkJaGFzR3JhbnRv clByaXYgPSAidCI7CiEgCQkJCWkrKzsKISAJCQl9CiEgCiEgCQkJVmVjdG9y IHVzZXJzV2l0aFBlcm1pc3Npb24gPSAoVmVjdG9yKXByaXZpbGVnZXMuZ2V0 KHNxbHByaXYpOwohIAkJCWlmICh1c2Vyc1dpdGhQZXJtaXNzaW9uID09IG51 bGwpIHsKISAJCQkJdXNlcnNXaXRoUGVybWlzc2lvbiA9IG5ldyBWZWN0b3Io KTsKISAJCQkJcHJpdmlsZWdlcy5wdXQoc3FscHJpdix1c2Vyc1dpdGhQZXJt aXNzaW9uKTsKISAJCQl9CiAgCisgCQkJU3RyaW5nW10gZ3JhbnRlZV9ncmFu dG9yID0ge25hbWUsIGdyYW50b3IsIGhhc0dyYW50b3JQcml2fTsKKyAJCQl1 c2Vyc1dpdGhQZXJtaXNzaW9uLmFkZEVsZW1lbnQoZ3JhbnRlZV9ncmFudG9y KTsKKyAJCX0KKyAJfQorIAkKKyAJLyoqCisgCSAqIFRha2UgdGhlIGEgU3Ry aW5nIHJlcHJlc2VudGluZyBhbiBhcnJheSBvZiBBQ0xzIGFuZCByZXR1cm4K KyAJICogYSBIYXNodGFibGUgbWFwcGluZyB0aGUgU1FMIHBlcm1pc3Npb24g bmFtZSB0byBhIFZlY3RvciBvZgorIAkgKiB1c2VybmFtZXMgd2hvIGhhdmUg dGhhdCBwZXJtaXNzaW9uLgorIAkgKi8KKyAJcHJvdGVjdGVkIEhhc2h0YWJs ZSBwYXJzZUFDTChTdHJpbmcgYWNsQXJyYXksIFN0cmluZyBvd25lcikgdGhy b3dzIFNRTEV4Y2VwdGlvbiB7CisgCQlpZiAoYWNsQXJyYXkgPT0gbnVsbCB8 fCBhY2xBcnJheSA9PSAiIikgeworIAkJCS8vbnVsbCBhY2wgaXMgYSBzaG9y dGN1dCBmb3Igb3duZXIgaGF2aW5nIGZ1bGwgcHJpdnMKKyAJCQlhY2xBcnJh eSA9ICJ7IiArIG93bmVyICsgIj1hcndkUnh0fSI7CisgCQl9CisgCQlWZWN0 b3IgYWNscyA9IHBhcnNlQUNMQXJyYXkoYWNsQXJyYXkpOworIAkJSGFzaHRh YmxlIHByaXZpbGVnZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgCQlib29sZWFu IGhhdmVNaW43NCA9IGNvbm5lY3Rpb24uaGF2ZU1pbmltdW1TZXJ2ZXJWZXJz aW9uKCI3LjQiKTsKKyAJCWZvciAoaW50IGk9MDsgaTxhY2xzLnNpemUoKTsg aSsrKSB7CisgCQkJU3RyaW5nIGFjbCA9IChTdHJpbmcpYWNscy5lbGVtZW50 QXQoaSk7CisgCQkJYWRkQUNMUHJpdmlsZWdlcyhoYXZlTWluNzQsIGFjbCxw cml2aWxlZ2VzKTsKKyAJCX0KKyAJCXJldHVybiBwcml2aWxlZ2VzOworIAl9 CisgfQogIAogIAogIApJbmRleDogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1p bi9wZ3NxbC9BYnN0cmFjdFJoZGI3NERhdGFiYXNlTWV0YURhdGEuamF2YQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3Jj L3JoZGIvZ3VpdG9vbHMvcmhkYi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRi L2FkbWluL3Bnc3FsL0Fic3RyYWN0UmhkYjc0RGF0YWJhc2VNZXRhRGF0YS5q YXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtYyAtcjEuMiBB YnN0cmFjdFJoZGI3NERhdGFiYXNlTWV0YURhdGEuamF2YQoqKiogc3JjL2Nv bS9yZWRoYXQvcmhkYi9hZG1pbi9wZ3NxbC9BYnN0cmFjdFJoZGI3NERhdGFi YXNlTWV0YURhdGEuamF2YQk0IE1heSAyMDA0IDE2OjU3OjE1IC0wMDAwCTEu MgotLS0gc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi9wZ3NxbC9BYnN0cmFj dFJoZGI3NERhdGFiYXNlTWV0YURhdGEuamF2YQk5IEp1biAyMDA0IDA1OjM5 OjI4IC0wMDAwCioqKioqKioqKioqKioqKgoqKiogNTEsNTUgKioqKgotLS0g NTEsNjYgLS0tLQogIAkJCiAgCQlyZXR1cm4gY29ubmVjdGlvbi5jcmVhdGVT dGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoc3FsKTsKICAJfQorIAkKKyAJLyoq CisgCSAqIFJldHVybnMgdGhlIGdyYW50IG9wdGlvbiBzdHJpbmcgZm9yIHRo aXMgZGF0YWJhc2UgdmVyc2lvbi4gRm9yIDcuNCBhbmQgCisgCSAqIGhpZ2hl ciwgdGhlZSBzdHJpbmcgaXMgIldJVEggR1JBTlQgT1BUSU9OIgorIAkgKgor IAkgKiBAcmV0dXJuIFRoZSBzdHJpbmcKKyAJICovCisgCQorIAlwdWJsaWMg U3RyaW5nIGdldEdyYW50T3B0aW9uU3RyaW5nKCkgeworIAkJcmV0dXJuICJX SVRIIEdSQU5UIE9QVElPTiI7CisgCX0KICB9CiAgCkluZGV4OiBzcmMvY29t L3JlZGhhdC9yaGRiL2FkbWluL3Bnc3FsL0FkbWluRGF0YWJhc2VNZXRhRGF0 YS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv cmhkYi9zcmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVk aGF0L3JoZGIvYWRtaW4vcGdzcWwvQWRtaW5EYXRhYmFzZU1ldGFEYXRhLmph dmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1jIC1yMS4yIEFk bWluRGF0YWJhc2VNZXRhRGF0YS5qYXZhCioqKiBzcmMvY29tL3JlZGhhdC9y aGRiL2FkbWluL3Bnc3FsL0FkbWluRGF0YWJhc2VNZXRhRGF0YS5qYXZhCTQg TWF5IDIwMDQgMTY6NTc6MTUgLTAwMDAJMS4yCi0tLSBzcmMvY29tL3JlZGhh dC9yaGRiL2FkbWluL3Bnc3FsL0FkbWluRGF0YWJhc2VNZXRhRGF0YS5qYXZh CTkgSnVuIDIwMDQgMDU6Mzk6MjggLTAwMDAKKioqKioqKioqKioqKioqCioq KiAxMTYsMTIxICoqKioKLS0tIDExNiwxMjMgLS0tLQogIAkKICAJUmVzdWx0 U2V0IGdldEZ1bmN0aW9uV2l0aE5vQXJndW1lbnRzKFN0cmluZyBuYW1lKSB0 aHJvd3MgU1FMRXhjZXB0aW9uOwogIAorIAlTdHJpbmcgZ2V0R3JhbnRPcHRp b25TdHJpbmcoKTsKKyAJCiAgCVJlc3VsdFNldCBnZXRHcm91cHMoKSB0aHJv d3MgU1FMRXhjZXB0aW9uOwogIAkKICAJUmVzdWx0U2V0IGdldEdyb3VwSW5m byhTdHJpbmcgZ3JvdXBOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uOwpJbmRl eDogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVlL0RhdGFiYXNlTm9k ZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv cmhkYi9zcmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVk aGF0L3JoZGIvYWRtaW4vdHJlZS9EYXRhYmFzZU5vZGUuamF2YSx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLWMgLXIxLjIgRGF0YWJhc2VOb2Rl LmphdmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9EYXRh YmFzZU5vZGUuamF2YQkyMyBEZWMgMjAwMyAxNjo1MDowNCAtMDAwMAkxLjIK LS0tIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9EYXRhYmFzZU5v ZGUuamF2YQk5IEp1biAyMDA0IDA1OjM5OjI5IC0wMDAwCioqKioqKioqKioq KioqKgoqKiogMSw1ICoqKioKICAvKgohICAqIENvcHlyaWdodCAoYykgMjAw MyBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICogVGhp cyBzb2Z0d2FyZSBtYXkgYmUgZnJlZWx5IHJlZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZQogICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLgogICAqCi0tLSAxLDUgLS0tLQogIC8qCiEgICogQ29weXJpZ2h0IChj KSAyMDAzLCAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmli dXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UuCiAgICoKKioqKioqKioqKioqKioqCioqKiAzNzgs MzgzICoqKioKLS0tIDM3OCwzODQgLS0tLQogIAkJCQkJCiAgCQkJCQl0b1No b3cgPSAiIjsKICAJCQkJCVN0cmluZyB1c2VyTmFtZSA9IHByaXZEYXRhW2pd WzBdOworIAkJCQkJU3RyaW5nIGdyYW50b3IgPSBwcml2RGF0YVtqXVsyXTsK ICAJCQkJCXRvU2hvdyArPSB1c2VyTmFtZTsKICAJCQkJCXRvU2hvdyArPSAi KCI7CiAgCQkJCQkKKioqKioqKioqKioqKioqCioqKiAzODYsMzkxICoqKioK LS0tIDM4NywzOTYgLS0tLQogIAkJCQkJZWxzZSAKICAJCQkJCQl0b1Nob3cg Kz0gcHJpdkRhdGFbal1bMV07CiAgCQkJCQkKKyAJCQkJCWlmIChwcml2RGF0 YVtqXVszXS5lcXVhbHMoIllFUyIpKSB7CisgCQkJCQkJdG9TaG93ICs9ICIq IjsKKyAJCQkJCX0KKyAJCQkJCQogIAkJCQkJZm9yIChpbnQgaz1qKzE7IGsg PCBwcml2RGF0YS5sZW5ndGg7IGsrKykgewogIAkJCQkJCWlmIChwcml2RGF0 YVtrXVswXSAhPSBudWxsICYmIHByaXZEYXRhW2tdWzBdLmVxdWFscyh1c2Vy TmFtZSkpIHsKICAJCQkJCQkJCioqKioqKioqKioqKioqKgoqKiogMzk0LDQw NCAqKioqCiAgCQkJCQkJCWVsc2UgCiAgCQkJCQkJCQl0b1Nob3cgKz0gIiAi ICsgcHJpdkRhdGFba11bMV07CiAgCQkJCQkJCQkKICAJCQkJCQkJcHJpdkRh dGFba11bMF0gPSBudWxsOwogIAkJCQkJCX0KICAJCQkJCX0KICAJCQkJCQoh IAkJCQkJdG9TaG93ICs9ICIpIjsKICAJCQkJCWVudHJpZXMuYWRkKHRvU2hv dyk7CiAgCQkJCX0KICAJCQkJCi0tLSAzOTksNDEzIC0tLS0KICAJCQkJCQkJ ZWxzZSAKICAJCQkJCQkJCXRvU2hvdyArPSAiICIgKyBwcml2RGF0YVtrXVsx XTsKICAJCQkJCQkJCQorIAkJCQkJCQlpZiAocHJpdkRhdGFba11bM10uZXF1 YWxzKCJZRVMiKSkgeworIAkJCQkJCQkJdG9TaG93ICs9ICIqIjsKKyAJCQkJ CQkJfQorIAogIAkJCQkJCQlwcml2RGF0YVtrXVswXSA9IG51bGw7CiAgCQkJ CQkJfQogIAkJCQkJfQogIAkJCQkJCiEgCQkJCQl0b1Nob3cgKz0gIikvIiAr IGdyYW50b3I7CiAgCQkJCQllbnRyaWVzLmFkZCh0b1Nob3cpOwogIAkJCQl9 CiAgCQkJCQpJbmRleDogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVl L0Z1bmN0aW9uTm9kZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvcmhkYi9zcmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWlu L3NyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9GdW5jdGlvbk5vZGUu amF2YSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLWMgLXIxLjMg RnVuY3Rpb25Ob2RlLmphdmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRt aW4vdHJlZS9GdW5jdGlvbk5vZGUuamF2YQkzMSBEZWMgMjAwMyAwNTo1Njoz OCAtMDAwMAkxLjMKLS0tIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJl ZS9GdW5jdGlvbk5vZGUuamF2YQk5IEp1biAyMDA0IDA1OjM5OjI5IC0wMDAw CioqKioqKioqKioqKioqKgoqKiogMSw1ICoqKioKICAvKgohICAqIENvcHly aWdodCAoYykgMjAwMyBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCiAgICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZnJlZWx5IHJlZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLgogICAqCi0tLSAxLDUgLS0tLQogIC8qCiEgICog Q29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFJlZCBIYXQsIEluYy4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVl bHkgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKKioqKioqKioqKioq KioqCioqKiA0NjYsNDczICoqKioKICAJCQkJCQkJcHJpdkRhdGFbal1bMF0u c3Vic3RyaW5nKHByaXZEYXRhW2pdWzBdLmluZGV4T2YoJyAnKSkgKyAiICgi ICsgCiAgCQkJCQkJCXByaXZEYXRhW2pdWzFdICsgIikiOwogIAkJCQkJZWxz ZQohIAkJCQkJCXRvU2hvdyA9IHByaXZEYXRhW2pdWzBdICsgIiAoIiArIHBy aXZEYXRhW2pdWzFdICsgIikiOwohIAkJCQkJCQkJCQkJCQkJCQogIAkJCQkJ ZW50cmllcy5hZGQodG9TaG93KTsKICAJCQkJfQogIAkJCQkKLS0tIDQ2Niw0 NzkgLS0tLQogIAkJCQkJCQlwcml2RGF0YVtqXVswXS5zdWJzdHJpbmcocHJp dkRhdGFbal1bMF0uaW5kZXhPZignICcpKSArICIgKCIgKyAKICAJCQkJCQkJ cHJpdkRhdGFbal1bMV0gKyAiKSI7CiAgCQkJCQllbHNlCiEgCQkJCQkJdG9T aG93ID0gcHJpdkRhdGFbal1bMF0gKyAiICgiICsgcHJpdkRhdGFbal1bMV07 CiEgCQkJCQkKISAJCQkJCWlmIChwcml2RGF0YVtqXVszXS5lcXVhbHMoIllF UyIpKSB7CiEgCQkJCQkJCQl0b1Nob3cgKz0gIioiOwohIAkJCQkJfQohIAkJ CQkJCiEgCQkJCQl0b1Nob3cgKz0gIikvIiArIHByaXZEYXRhW2pdWzJdOwoh IAkJCQkJCiAgCQkJCQllbnRyaWVzLmFkZCh0b1Nob3cpOwogIAkJCQl9CiAg CQkJCQpJbmRleDogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVlL0xh bmd1YWdlTm9kZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvcmhkYi9zcmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWluL3Ny Yy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9MYW5ndWFnZU5vZGUuamF2 YSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLWMgLXIxLjMgTGFu Z3VhZ2VOb2RlLmphdmEKKioqIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4v dHJlZS9MYW5ndWFnZU5vZGUuamF2YQkzIEphbiAyMDA0IDA0OjMwOjE4IC0w MDAwCTEuMwotLS0gc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVlL0xh bmd1YWdlTm9kZS5qYXZhCTkgSnVuIDIwMDQgMDU6Mzk6MjkgLTAwMDAKKioq KioqKioqKioqKioqCioqKiAxLDUgKioqKgogIC8qCiEgICogQ29weXJpZ2h0 IChjKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkgcmVkaXN0cmlidXRl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UuCiAgICoKLS0tIDEsNSAtLS0tCiAgLyoKISAgKiBDb3B5 cmlnaHQgKGMpIDIwMDMsIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRz IHJlc2VydmVkLgogICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGZyZWVseSBy ZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAgKgoqKioqKioqKioqKioqKioK KioqIDQyNiw0MzIgKioqKgogIAkJCQkJCQkJKyBBZG1pblJlc291cmNlcy5n ZXRTdHJpbmcoQWRtaW5SZXNvdXJjZXMuVklFV19HUk9VUF9QUklWX1BSRUZJ WCkgKyBwcml2ZWxlZ2VzRGF0YVtqXVswXS5zdWJzdHJpbmcoaW5kZXgrNSk7 CQkJCQkJCQogIAkJCQkJCX0JCiAgCQohIAkJCQkJCWVudHJpZXMuYWRkKHBy aXZlbGVnZXNEYXRhW2pdWzBdKyAiICAoIiArIHByaXZlbGVnZXNEYXRhW2pd WzFdICsgIikgIik7CiAgCQkJCQl9CiAgCQkJCQkJCiAgCQkJCQlPYmplY3Rb XSBlbnRyeUFycmF5ID0gZW50cmllcy50b0FycmF5KCk7Ci0tLSA0MjYsNDQ0 IC0tLS0KICAJCQkJCQkJCSsgQWRtaW5SZXNvdXJjZXMuZ2V0U3RyaW5nKEFk bWluUmVzb3VyY2VzLlZJRVdfR1JPVVBfUFJJVl9QUkVGSVgpICsgcHJpdmVs ZWdlc0RhdGFbal1bMF0uc3Vic3RyaW5nKGluZGV4KzUpOwkJCQkJCQkKICAJ CQkJCQl9CQogIAkKISAJCQkJCQlTdHJpbmcgdG9TaG93ID0gcHJpdmVsZWdl c0RhdGFbal1bMF0rICIgICgiICsgcHJpdmVsZWdlc0RhdGFbal1bMV07CiEg CQkJCQkJCiEgCQkJCQkJaWYgKHByaXZlbGVnZXNEYXRhW2pdWzNdLmVxdWFs cygiWUVTIikpIHsKISAJCQkJCQkJdG9TaG93ICs9ICIqIjsKISAJCQkJCQl9 CiEgCQkJCQkJCiEgCQkJCQkJdG9TaG93ICs9ICIpIjsKISAJCQkJCQkKISAJ CQkJCQlpZiAoIXByaXZlbGVnZXNEYXRhW2pdWzJdLmVxdWFscygiIikpIHsK ISAJCQkJCQkJdG9TaG93ICs9ICIvIiArIHByaXZlbGVnZXNEYXRhW2pdWzJd OwohIAkJCQkJCX0KISAJCQkJCQkKISAJCQkJCQllbnRyaWVzLmFkZCh0b1No b3cpOwogIAkJCQkJfQogIAkJCQkJCQogIAkJCQkJT2JqZWN0W10gZW50cnlB cnJheSA9IGVudHJpZXMudG9BcnJheSgpOwpJbmRleDogc3JjL2NvbS9yZWRo YXQvcmhkYi9hZG1pbi90cmVlL1NjaGVtYU5vZGUuamF2YQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3JjL3JoZGIvZ3Vp dG9vbHMvcmhkYi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL3Ry ZWUvU2NoZW1hTm9kZS5qYXZhLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIK ZGlmZiAtYyAtcjEuMiBTY2hlbWFOb2RlLmphdmEKKioqIHNyYy9jb20vcmVk aGF0L3JoZGIvYWRtaW4vdHJlZS9TY2hlbWFOb2RlLmphdmEJMjMgRGVjIDIw MDMgMTY6NTA6MDQgLTAwMDAJMS4yCi0tLSBzcmMvY29tL3JlZGhhdC9yaGRi L2FkbWluL3RyZWUvU2NoZW1hTm9kZS5qYXZhCTkgSnVuIDIwMDQgMDU6Mzk6 MzAgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAxLDUgKioqKgogIC8qCiEg ICogQ29weXJpZ2h0IChjKSAyMDAzIFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBmcmVlbHkg cmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCiAgICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgICoKLS0tIDEsNSAtLS0tCiAg LyoKISAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgUmVkIEhhdCwgSW5j LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqIFRoaXMgc29mdHdhcmUgbWF5 IGJlIGZyZWVseSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUKICAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAgKgoqKioq KioqKioqKioqKioKKioqIDIzNywyNDIgKioqKgotLS0gMjM3LDI0MyAtLS0t CiAgCQkJcHJpdkRhdGEgPSBjbGllbnQucmVzdWx0U2V0VG9TdHJpbmdBcnJh eShkYm1kLmdldFNjaGVtYVByaXZpbGVnZXModGhpcy50b1N0cmluZygpKSwg bGVhc2UpOwogIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAJCQkvLyBB TlkgZXhjZXB0aW9uIGF0IHRoaXMgcG9pbnQgaXMgcmVhc29uIGVub3VnaCB0 byBhYm9ydAorIAkJCWUucHJpbnRTdGFja1RyYWNlKCk7CiAgCQkJdGhyb3cg bmV3IFZpZXdSYWlzZUV4Y2VwdGlvbih0aGlzLCBlKTsKICAJCX0KICAJCQoq KioqKioqKioqKioqKioKKioqIDMzNywzNTQgKioqKgogIAkJCQkJCiAgCQkJ CQl0b1Nob3cgPSAiIjsKICAJCQkJCVN0cmluZyB1c2VyTmFtZSA9IHByaXZE YXRhW2pdWzBdOwogIAkJCQkJdG9TaG93ICs9IHVzZXJOYW1lOwogIAkJCQkJ dG9TaG93ICs9ICIoIjsKICAJCQkJCXRvU2hvdyArPSBwcml2RGF0YVtqXVsx XTsKICAKICAJCQkJCWZvciAoaW50IGs9aisxOyBrIDwgcHJpdkRhdGEubGVu Z3RoOyBrKyspIHsKICAJCQkJCQlpZiAocHJpdkRhdGFba11bMF0gIT0gbnVs bCAmJiBwcml2RGF0YVtrXVswXS5lcXVhbHModXNlck5hbWUpKSB7CiAgCQkJ CQkJCXRvU2hvdyArPSAiICIgKyBwcml2RGF0YVtrXVsxXTsKICAJCQkJCQkJ cHJpdkRhdGFba11bMF0gPSBudWxsOwogIAkJCQkJCX0KICAJCQkJCX0KICAJ CQkJCQohIAkJCQkJdG9TaG93ICs9ICIpIjsKICAJCQkJCWVudHJpZXMuYWRk KHRvU2hvdyk7CiAgCQkJCX0KICAJCQkJCi0tLSAzMzgsMzYyIC0tLS0KICAJ CQkJCQogIAkJCQkJdG9TaG93ID0gIiI7CiAgCQkJCQlTdHJpbmcgdXNlck5h bWUgPSBwcml2RGF0YVtqXVswXTsKKyAJCQkJCVN0cmluZyBncmFudG9yID0g cHJpdkRhdGFbal1bMl07CiAgCQkJCQl0b1Nob3cgKz0gdXNlck5hbWU7CiAg CQkJCQl0b1Nob3cgKz0gIigiOwogIAkJCQkJdG9TaG93ICs9IHByaXZEYXRh W2pdWzFdOworIAkJCQkJaWYgKHByaXZEYXRhW2pdWzNdLmVxdWFscygiWUVT IikpCisgCQkJCQkJCQl0b1Nob3cgKz0gIioiOwogIAogIAkJCQkJZm9yIChp bnQgaz1qKzE7IGsgPCBwcml2RGF0YS5sZW5ndGg7IGsrKykgewogIAkJCQkJ CWlmIChwcml2RGF0YVtrXVswXSAhPSBudWxsICYmIHByaXZEYXRhW2tdWzBd LmVxdWFscyh1c2VyTmFtZSkpIHsKICAJCQkJCQkJdG9TaG93ICs9ICIgIiAr IHByaXZEYXRhW2tdWzFdOworIAkJCQkJCQkKKyAJCQkJCQkJaWYgKHByaXZE YXRhW2tdWzNdLmVxdWFscygiWUVTIikpCisgCQkJCQkJCQl0b1Nob3cgKz0g IioiOworIAkJCQkJCQkKICAJCQkJCQkJcHJpdkRhdGFba11bMF0gPSBudWxs OwogIAkJCQkJCX0KICAJCQkJCX0KICAJCQkJCQohIAkJCQkJdG9TaG93ICs9 ICIpLyIgKyBncmFudG9yOwogIAkJCQkJZW50cmllcy5hZGQodG9TaG93KTsK ICAJCQkJfQogIAkJCQkKSW5kZXg6IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRt aW4vdHJlZS9TZXF1ZW5jZU5vZGUuamF2YQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3JoZGIvc3JjL3JoZGIvZ3VpdG9vbHMvcmhk Yi1hZG1pbi9zcmMvY29tL3JlZGhhdC9yaGRiL2FkbWluL3RyZWUvU2VxdWVu Y2VOb2RlLmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1j IC1yMS4zIFNlcXVlbmNlTm9kZS5qYXZhCioqKiBzcmMvY29tL3JlZGhhdC9y aGRiL2FkbWluL3RyZWUvU2VxdWVuY2VOb2RlLmphdmEJNCBNYXkgMjAwNCAx Njo1NzoxNiAtMDAwMAkxLjMKLS0tIHNyYy9jb20vcmVkaGF0L3JoZGIvYWRt aW4vdHJlZS9TZXF1ZW5jZU5vZGUuamF2YQk5IEp1biAyMDA0IDA1OjM5OjMw IC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMzkzLDQxNSAqKioqCiAgCQkJ CQkvLyBjaGVjayBpZiByb3cgaGFzIGJlZW4gYWRkZWQKICAJCQkJCWlmIChw cml2RGF0YVtqXVswXSA9PSBudWxsKQogIAkJCQkJCWNvbnRpbnVlOwohIAkJ CQkJCQogIAkJCQkJaWYgKHByaXZEYXRhW2pdWzBdLnN0YXJ0c1dpdGgoImdy b3VwICIpKQogIAkJCQkJCXRvU2hvdyA9IEFkbWluUmVzb3VyY2VzLmdldFN0 cmluZyhBZG1pblJlc291cmNlcy5WSUVXX0dST1VQX1BSSVZfUFJFRklYKSAr IAogIAkJCQkJCQlwcml2RGF0YVtqXVswXS5zdWJzdHJpbmcocHJpdkRhdGFb al1bMF0uaW5kZXhPZignICcpKSArICIgKCIgKyAKICAJCQkJCQkJcHJpdkRh dGFbal1bMV07CiAgCQkJCQllbHNlCiAgCQkJCQkJdG9TaG93ID0gcHJpdkRh dGFbal1bMF0gKyAiICgiICsgcHJpdkRhdGFbal1bMV07CiEgCQkJCQkJCQkJ CQogIAkJCQkJZm9yIChpbnQgayA9IGogKyAxOyBrIDwgcHJpdkRhdGEubGVu Z3RoOyBrKyspIHsKICAJCQkJCQlpZiAoKHByaXZEYXRhW2tdWzBdICE9IG51 bGwpICYmIHByaXZEYXRhW2tdWzBdLmVxdWFscyhwcml2RGF0YVtqXVswXSkp IHsKICAJCQkJCQkJdG9TaG93ICs9ICIgIiArIHByaXZEYXRhW2tdWzFdOwog IAkJCQkJCQkvLyBzZXQgZWFjaCBhZGRlZCByb3cgdG8gbnVsbAogIAkJCQkJ CQlwcml2RGF0YVtrXVswXSA9IG51bGw7CiAgCQkJCQkJfQogIAkJCQkJfQog IAkJCQkJCiEgCQkJCQl0b1Nob3cgKz0gIikiOwogIAkJCQkJZW50cmllcy5h ZGQodG9TaG93KTsKICAJCQkJfQogIAkJCQkKLS0tIDM5Myw0MjMgLS0tLQog IAkJCQkJLy8gY2hlY2sgaWYgcm93IGhhcyBiZWVuIGFkZGVkCiAgCQkJCQlp ZiAocHJpdkRhdGFbal1bMF0gPT0gbnVsbCkKICAJCQkJCQljb250aW51ZTsK ISAJCQkJCQohIAkJCQkJU3RyaW5nIGdyYW50b3IgPSBwcml2RGF0YVtqXVsy XTsKICAJCQkJCWlmIChwcml2RGF0YVtqXVswXS5zdGFydHNXaXRoKCJncm91 cCAiKSkKICAJCQkJCQl0b1Nob3cgPSBBZG1pblJlc291cmNlcy5nZXRTdHJp bmcoQWRtaW5SZXNvdXJjZXMuVklFV19HUk9VUF9QUklWX1BSRUZJWCkgKyAK ICAJCQkJCQkJcHJpdkRhdGFbal1bMF0uc3Vic3RyaW5nKHByaXZEYXRhW2pd WzBdLmluZGV4T2YoJyAnKSkgKyAiICgiICsgCiAgCQkJCQkJCXByaXZEYXRh W2pdWzFdOwogIAkJCQkJZWxzZQogIAkJCQkJCXRvU2hvdyA9IHByaXZEYXRh W2pdWzBdICsgIiAoIiArIHByaXZEYXRhW2pdWzFdOwohIAohIAkJCQkJaWYg KHByaXZEYXRhW2pdWzNdLmVxdWFscygiWUVTIikpCiEgCQkJCQkJCQl0b1No b3cgKz0gIioiOwohIAogIAkJCQkJZm9yIChpbnQgayA9IGogKyAxOyBrIDwg cHJpdkRhdGEubGVuZ3RoOyBrKyspIHsKICAJCQkJCQlpZiAoKHByaXZEYXRh W2tdWzBdICE9IG51bGwpICYmIHByaXZEYXRhW2tdWzBdLmVxdWFscyhwcml2 RGF0YVtqXVswXSkpIHsKICAJCQkJCQkJdG9TaG93ICs9ICIgIiArIHByaXZE YXRhW2tdWzFdOworIAkJCQkJCQkKKyAJCQkJCQkJaWYgKHByaXZEYXRhW2td WzNdLmVxdWFscygiWUVTIikpCisgCQkJCQkJCQl0b1Nob3cgKz0gIioiOwor IAogIAkJCQkJCQkvLyBzZXQgZWFjaCBhZGRlZCByb3cgdG8gbnVsbAogIAkJ CQkJCQlwcml2RGF0YVtrXVswXSA9IG51bGw7CiAgCQkJCQkJfQogIAkJCQkJ fQogIAkJCQkJCiEgCQkJCQl0b1Nob3cgKz0gIikvIiArIGdyYW50b3I7CiAg CQkJCQllbnRyaWVzLmFkZCh0b1Nob3cpOwogIAkJCQl9CiAgCQkJCQpJbmRl eDogc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVlL1RhYmxlTm9kZS5q YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcmhk Yi9zcmMvcmhkYi9ndWl0b29scy9yaGRiLWFkbWluL3NyYy9jb20vcmVkaGF0 L3JoZGIvYWRtaW4vdHJlZS9UYWJsZU5vZGUuamF2YSx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4zCmRpZmYgLWMgLXIxLjMgVGFibGVOb2RlLmphdmEKKioq IHNyYy9jb20vcmVkaGF0L3JoZGIvYWRtaW4vdHJlZS9UYWJsZU5vZGUuamF2 YQk0IE1heSAyMDA0IDE2OjU3OjE2IC0wMDAwCTEuMwotLS0gc3JjL2NvbS9y ZWRoYXQvcmhkYi9hZG1pbi90cmVlL1RhYmxlTm9kZS5qYXZhCTkgSnVuIDIw MDQgMDU6Mzk6MzAgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAzMTIsMzE3 ICoqKioKLS0tIDMxMiwzMTggLS0tLQogIAkJCW1ldGFEYXRhID0gY2xpZW50 LnJlc3VsdFNldFRvU3RyaW5nQXJyYXkoZGJtZC5nZXRUYWJsZUluZm8odGhp cy5nZXRQYXJlbnRTY2hlbWFOYW1lKCksIHRoaXMudG9TdHJpbmcoKSksIGxl YXNlKTsKICAJCQlwcml2RGF0YSA9IGNsaWVudC5yZXN1bHRTZXRUb1N0cmlu Z0FycmF5KGRibWQuZ2V0VGFibGVQcml2aWxlZ2VzKG51bGwsIHRoaXMuZ2V0 UGFyZW50U2NoZW1hTmFtZSgpLCB0aGlzLnRvU3RyaW5nKCkpLCBsZWFzZSk7 CiAgCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworIAkJCWUucHJpbnRTdGFj a1RyYWNlKCk7CiAgCQkJLy8gQU5ZIGV4Y2VwdGlvbiBhdCB0aGlzIHBvaW50 IGlzIHJlYXNvbiBlbm91Z2ggdG8gYWJvcnQKICAJCQl0aHJvdyBuZXcgVmll d1JhaXNlRXhjZXB0aW9uKHRoaXMsIGUpOwogIAkJfQoqKioqKioqKioqKioq KioKKioqIDU2Nyw1ODQgKioqKgogIAkJCQkJCiAgCQkJCQl0b1Nob3cgPSAi IjsKICAJCQkJCVN0cmluZyB1c2VyTmFtZSA9IHByaXZEYXRhW2pdWzRdOwog IAkJCQkJdG9TaG93ICs9IHVzZXJOYW1lOwogIAkJCQkJdG9TaG93ICs9ICIo IjsKICAJCQkJCXRvU2hvdyArPSBwcml2RGF0YVtqXVs1XTsKICAKICAJCQkJ CWZvciAoaW50IGs9aisxOyBrIDwgcHJpdkRhdGEubGVuZ3RoOyBrKyspIHsK ICAJCQkJCQlpZiAocHJpdkRhdGFba11bNF0gIT0gbnVsbCAmJiBwcml2RGF0 YVtrXVs0XS5lcXVhbHModXNlck5hbWUpKSB7CiAgCQkJCQkJCXRvU2hvdyAr PSAiICIgKyBwcml2RGF0YVtrXVs1XTsKICAJCQkJCQkJcHJpdkRhdGFba11b NF0gPSBudWxsOwogIAkJCQkJCX0KICAJCQkJCX0KICAJCQkJCQohIAkJCQkJ dG9TaG93ICs9ICIpIjsKICAJCQkJCWVudHJpZXMuYWRkKHRvU2hvdyk7CiAg CQkJCX0KICAJCQkJCi0tLSA1NjgsNTk1IC0tLS0KICAJCQkJCQogIAkJCQkJ dG9TaG93ID0gIiI7CiAgCQkJCQlTdHJpbmcgdXNlck5hbWUgPSBwcml2RGF0 YVtqXVs0XTsKKyAJCQkJCVN0cmluZyBncmFudG9yID0gcHJpdkRhdGFbal1b M107CiAgCQkJCQl0b1Nob3cgKz0gdXNlck5hbWU7CiAgCQkJCQl0b1Nob3cg Kz0gIigiOwogIAkJCQkJdG9TaG93ICs9IHByaXZEYXRhW2pdWzVdOworIAkJ CQkJCisgCQkJCQlpZihwcml2RGF0YVtqXVs2XS5lcXVhbHMoIllFUyIpKSB7 CisgCQkJCQkJCQl0b1Nob3cgKz0gIioiOworIAkJCQkJfQogIAogIAkJCQkJ Zm9yIChpbnQgaz1qKzE7IGsgPCBwcml2RGF0YS5sZW5ndGg7IGsrKykgewog IAkJCQkJCWlmIChwcml2RGF0YVtrXVs0XSAhPSBudWxsICYmIHByaXZEYXRh W2tdWzRdLmVxdWFscyh1c2VyTmFtZSkpIHsKICAJCQkJCQkJdG9TaG93ICs9 ICIgIiArIHByaXZEYXRhW2tdWzVdOworIAorIAkJCQkJCQlpZihwcml2RGF0 YVtrXVs2XS5lcXVhbHMoIllFUyIpKSB7CisgCQkJCQkJCQl0b1Nob3cgKz0g IioiOworIAkJCQkJCQl9CisgCQkJCQkJCQogIAkJCQkJCQlwcml2RGF0YVtr XVs0XSA9IG51bGw7CiAgCQkJCQkJfQogIAkJCQkJfQogIAkJCQkJCiEgCQkJ CQl0b1Nob3cgKz0gIikvIiArIGdyYW50b3I7CiAgCQkJCQllbnRyaWVzLmFk ZCh0b1Nob3cpOwogIAkJCQl9CiAgCQkJCQpJbmRleDogc3JjL2NvbS9yZWRo YXQvcmhkYi9hZG1pbi90cmVlL1ZpZXdOb2RlLmphdmEKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yaGRiL3NyYy9yaGRiL2d1aXRv b2xzL3JoZGItYWRtaW4vc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90cmVl L1ZpZXdOb2RlLmphdmEsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZm IC1jIC1yMS4yIFZpZXdOb2RlLmphdmEKKioqIHNyYy9jb20vcmVkaGF0L3Jo ZGIvYWRtaW4vdHJlZS9WaWV3Tm9kZS5qYXZhCTIzIERlYyAyMDAzIDE2OjUw OjA0IC0wMDAwCTEuMgotLS0gc3JjL2NvbS9yZWRoYXQvcmhkYi9hZG1pbi90 cmVlL1ZpZXdOb2RlLmphdmEJOSBKdW4gMjAwNCAwNTozOTozMSAtMDAwMAoq KioqKioqKioqKioqKioKKioqIDEsNSAqKioqCiAgLyoKISAgKiBDb3B5cmln aHQgKGMpIDIwMDMgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk LgogICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIGZyZWVseSByZWRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZS4KICAgKgotLS0gMSw1IC0tLS0KICAvKgohICAqIENv cHlyaWdodCAoYykgMjAwMywgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCiAgICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZnJlZWx5 IHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogICAqCioqKioqKioqKioqKioq KgoqKiogNTc3LDU4MyAqKioqCiAgCQkJCQkJCQogIAkJCQkJCQkvLyBTbywg Zmlyc3QgZXh0cmFjdCB0aGUgcHJpdmlsZWdlcyBsaXN0IGFuZCBhZGQgYSBu ZXcgZWxlbWVudC4KICAJCQkJCQkJQXJyYXlMaXN0IHByaXZpbGVnZXNMaXN0 ID0gKEFycmF5TGlzdClwcml2aWxlZ2VzTWFwLmdldChwcml2aWxlZ2VzRGF0 YVtqXVswXSk7CiEgCQkJCQkJCXByaXZpbGVnZXNMaXN0LmFkZChwcml2aWxl Z2VzRGF0YVtqXVsxXSk7CiAgCQkJCQkJCQogIAkJCQkJCQkvLyBSZXBsYWNl IHRoZSBlbnRyeSBpbiB0aGUgbWFwIHdpdGggdGhlIHVwZGF0ZWQgbGlzdC4K ICAJCQkJCQkJcHJpdmlsZWdlc01hcC5yZW1vdmUocHJpdmlsZWdlc0RhdGFb al1bMF0pOwotLS0gNTc3LDU5MCAtLS0tCiAgCQkJCQkJCQogIAkJCQkJCQkv LyBTbywgZmlyc3QgZXh0cmFjdCB0aGUgcHJpdmlsZWdlcyBsaXN0IGFuZCBh ZGQgYSBuZXcgZWxlbWVudC4KICAJCQkJCQkJQXJyYXlMaXN0IHByaXZpbGVn ZXNMaXN0ID0gKEFycmF5TGlzdClwcml2aWxlZ2VzTWFwLmdldChwcml2aWxl Z2VzRGF0YVtqXVswXSk7CiEgCQkJCQkJCQohIAkJCQkJCQlTdHJpbmcgcHJp diA9IHByaXZpbGVnZXNEYXRhW2pdWzFdOwohIAkJCQkJCQkKISAJCQkJCQkJ aWYgKHByaXZpbGVnZXNEYXRhW2pdWzNdLmVxdWFscygiWUVTIikpIHsKISAJ CQkJCQkJCXByaXYgKz0gIioiOwohIAkJCQkJCQl9CiEgCiEgCQkJCQkJCXBy aXZpbGVnZXNMaXN0LmFkZChwcml2KTsKICAJCQkJCQkJCiAgCQkJCQkJCS8v IFJlcGxhY2UgdGhlIGVudHJ5IGluIHRoZSBtYXAgd2l0aCB0aGUgdXBkYXRl ZCBsaXN0LgogIAkJCQkJCQlwcml2aWxlZ2VzTWFwLnJlbW92ZShwcml2aWxl Z2VzRGF0YVtqXVswXSk7CioqKioqKioqKioqKioqKgoqKiogNTg4LDU5NyAq KioqCiAgCQkJCQkJCS8vIElmIHRoZSBncmFudGVlIGlzIG5vdCBpbiB0aGUg bWFwIHlldCwgYWRkIGl0IG5vdy4KICAJCQkJCQkJCiAgCQkJCQkJCUFycmF5 TGlzdCBwcml2aWxlZ2VzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAJCQkJ CQkJcHJpdmlsZWdlc0xpc3QuYWRkKHByaXZpbGVnZXNEYXRhW2pdWzFdKTsK ICAJCQkJCQkJCiEgCQkJCQkJCXByaXZpbGVnZXNNYXAucHV0KHByaXZpbGVn ZXNEYXRhW2pdWzBdLCBwcml2aWxlZ2VzTGlzdCk7CiAgCQkJCQkJCQogIAkJ CQkJCX0KICAJCQkJCX0KICAJCQkJCQotLS0gNTk1LDYxNCAtLS0tCiAgCQkJ CQkJCS8vIElmIHRoZSBncmFudGVlIGlzIG5vdCBpbiB0aGUgbWFwIHlldCwg YWRkIGl0IG5vdy4KICAJCQkJCQkJCiAgCQkJCQkJCUFycmF5TGlzdCBwcml2 aWxlZ2VzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAJCQkJCQkJCiEgCQkJ CQkJCS8vIEZpcnN0IGVsZW1lbnQgaXMgdGhlIEdSQU5UT1IKISAJCQkJCQkJ CiEgCQkJCQkJCXByaXZpbGVnZXNMaXN0LmFkZChwcml2aWxlZ2VzRGF0YVtq XVsyXSk7CiAgCQkJCQkJCQorIAkJCQkJCQlTdHJpbmcgcHJpdiA9IHByaXZp bGVnZXNEYXRhW2pdWzFdOworIAkJCQkJCQkKKyAJCQkJCQkJaWYgKHByaXZp bGVnZXNEYXRhW2pdWzNdLmVxdWFscygiWUVTIikpIHsKKyAJCQkJCQkJCXBy aXYgKz0gIioiOworIAkJCQkJCQl9CisgCQkJCQkJCQorIAkJCQkJCQlwcml2 aWxlZ2VzTGlzdC5hZGQocHJpdik7CisgCQkJCQkJCQorIAkJCQkJCQlwcml2 aWxlZ2VzTWFwLnB1dChwcml2aWxlZ2VzRGF0YVtqXVswXSwgcHJpdmlsZWdl c0xpc3QpOwogIAkJCQkJCX0KICAJCQkJCX0KICAJCQkJCQoqKioqKioqKioq KioqKioKKioqIDYwNyw2MTkgKioqKgogIAkJCQkJCVN0cmluZ1tdIHByaXZp bGVnZXMgPSBuZXcgU3RyaW5nW3ByaXZpbGVnZXNMaXN0LnNpemUoKV07CiAg CQkJCQkJcHJpdmlsZWdlc0xpc3QudG9BcnJheShwcml2aWxlZ2VzKTsKICAJ CQkJCQkKISAJCQkJCQlmb3IgKGludCBrID0gMDsgayA8IHByaXZpbGVnZXMu bGVuZ3RoOyBrKyspIHsKICAJCQkJCQkJZW50cnkgKz0gcHJpdmlsZWdlc1tr XTsKICAJCQkJCQkJaWYgKGsgPCBwcml2aWxlZ2VzLmxlbmd0aCAtIDEpCiAg CQkJCQkJCQllbnRyeSArPSAiICI7CiAgCQkJCQkJfQogIAkJCQkJCQohIAkJ CQkJCWVudHJ5ICs9ICIpIjsKICAJCQkJCQkKICAJCQkJCQljb2x1bW5FbnRy eS5wdXQoZW50cnksIG51bGwpOwogIAkJCQkJCQotLS0gNjI0LDYzNiAtLS0t CiAgCQkJCQkJU3RyaW5nW10gcHJpdmlsZWdlcyA9IG5ldyBTdHJpbmdbcHJp dmlsZWdlc0xpc3Quc2l6ZSgpXTsKICAJCQkJCQlwcml2aWxlZ2VzTGlzdC50 b0FycmF5KHByaXZpbGVnZXMpOwogIAkJCQkJCQohIAkJCQkJCWZvciAoaW50 IGsgPSAxOyBrIDwgcHJpdmlsZWdlcy5sZW5ndGg7IGsrKykgewogIAkJCQkJ CQllbnRyeSArPSBwcml2aWxlZ2VzW2tdOwogIAkJCQkJCQlpZiAoayA8IHBy aXZpbGVnZXMubGVuZ3RoIC0gMSkKICAJCQkJCQkJCWVudHJ5ICs9ICIgIjsK ICAJCQkJCQl9CiAgCQkJCQkJCiEgCQkJCQkJZW50cnkgKz0gIikvIiArIHBy aXZpbGVnZXNbMF07CiAgCQkJCQkJCiAgCQkJCQkJY29sdW1uRW50cnkucHV0 KGVudHJ5LCBudWxsKTsKICAJCQkJCQkK --0-1538249354-1086760162=:36937--