appium-uiautomator2-driver 2.4.9 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -586,6 +586,45 @@ Name | Type | Required | Description | Example
586
586
  sensorType | string | yes | The set of all supported sensor types could be found in [adb-emu-commands.js](https://github.com/appium/appium-adb/blob/master/lib/tools/adb-emu-commands.js) (look for *SENSORS* object values). Check the output of `sensor status` command in the [emulator console](https://developer.android.com/studio/run/emulator-console) to see more details on the available sensor types | light
587
587
  value | string | yes | Check the output of `sensor get <sensorType>` command in the [emulator console](https://developer.android.com/studio/run/emulator-console) to see the acceptable value format for the given sensor type | 50
588
588
 
589
+ ### mobile: pullFile
590
+
591
+ Pulls a remote file from the device.
592
+
593
+ #### Arguments
594
+
595
+ Name | Type | Required | Description | Example
596
+ --- | --- | --- | --- | ---
597
+ remotePath | string | yes | The full path to the remote file or a specially formatted path, which points to an item inside an app bundle, for example `@my.app.id/my/path`. It is mandatory for the app bundle to have [debugging enabled](https://developer.android.com/studio/debug) in order to use the latter remotePath format. If the file with the given name does not exist then an exception will be thrown. | /sdcard/foo.bar
598
+
599
+ #### Returned Result
600
+
601
+ Base64-encoded string, which represents the content of the remote file.
602
+
603
+ ### mobile: pushFile
604
+
605
+ Pushes a local file to the device.
606
+
607
+ #### Arguments
608
+
609
+ Name | Type | Required | Description | Example
610
+ --- | --- | --- | --- | ---
611
+ remotePath | string | yes | The path on the device to where the payload should be written. The value format is similar to the one used in [pullFile](#mobile-pullfile) extension. If the file with the same name already exists then it will be silently overridden. | /sdcard/foo.bar
612
+ payload | string | yes | Base64-encoded content of the file to be pushed. | QXBwaXVt
613
+
614
+ ### mobile: pullFolder
615
+
616
+ Pulls a remote folder from the device.
617
+
618
+ #### Arguments
619
+
620
+ Name | Type | Required | Description | Example
621
+ --- | --- | --- | --- | ---
622
+ remotePath | string | yes | Same as for [pullFile](#mobile-pullfile) extension, but should be pointing to a remote folder | /sdcard/yolo/
623
+
624
+ #### Returned Result
625
+
626
+ Base64-encoded string, which represents the zipped content of the remote folder.
627
+
589
628
  ### mobile: deleteFile
590
629
 
591
630
  Deletes a file on the remote device.
@@ -596,6 +635,95 @@ Name | Type | Required | Description | Example
596
635
  --- | --- | --- | --- | ---
597
636
  remotePath | string | yes | The full path to the remote file or a file inside an application bundle | `/sdcard/myfile.txt` or `@my.app.id/path/in/bundle`
598
637
 
638
+ ### mobile: isAppInstalled
639
+
640
+ Verify whether an application is installed on the device under test.
641
+
642
+ #### Arguments
643
+
644
+ Name | Type | Required | Description | Example
645
+ --- | --- | --- | --- | ---
646
+ appId | string | yes | The identifier of the application package to be checked | `my.app.id`
647
+
648
+ #### Returned Result
649
+
650
+ True or false
651
+
652
+ ### mobile: queryAppState
653
+
654
+ Queries the current state of the app.
655
+
656
+ #### Arguments
657
+
658
+ Name | Type | Required | Description | Example
659
+ --- | --- | --- | --- | ---
660
+ appId | string | yes | The identifier of the application package to be checked | `my.app.id`
661
+
662
+ #### Returned Result
663
+
664
+ The following numbers could returned:
665
+ - The app is not installed: `0`
666
+ - The app is installed and is not running: `1`
667
+ - The app is running in background: `3`
668
+ - The app is running in foreground: `4`
669
+
670
+ ### mobile: activateApp
671
+
672
+ Activates the given application or launches it if necessary.
673
+ The action literally simulates
674
+ clicking the corresponding application icon on the dashboard.
675
+
676
+ #### Arguments
677
+
678
+ Name | Type | Required | Description | Example
679
+ --- | --- | --- | --- | ---
680
+ appId | string | yes | The identifier of the application package to be activated | `my.app.id`
681
+
682
+ ### mobile: removeApp
683
+
684
+ Remove the corresponding application if is installed.
685
+ The call is ignored if the app is not installed.
686
+
687
+ #### Arguments
688
+
689
+ Name | Type | Required | Description | Example
690
+ --- | --- | --- | --- | ---
691
+ appId | string | yes | The identifier of the application package to be removed | `my.app.id`
692
+
693
+ #### Returned Result
694
+
695
+ True is the app has been found on the device and successfully removed. Otherwise false.
696
+
697
+ ### mobile: terminateApp
698
+
699
+ Terminates the app if it is running.
700
+
701
+ #### Arguments
702
+
703
+ Name | Type | Required | Description | Example
704
+ --- | --- | --- | --- | ---
705
+ appId | string | yes | The identifier of the application package to be terminated | `my.app.id`
706
+ timeout | number | no | The count of milliseconds to wait until the app is terminated. 500ms by default. | 1500
707
+
708
+ #### Returned Result
709
+
710
+ True if the app has been successfully terminated.
711
+
712
+ ### mobile: installApp
713
+
714
+ Installs the given application package to the device under test.
715
+
716
+ #### Arguments
717
+
718
+ Name | Type | Required | Description | Example
719
+ --- | --- | --- | --- | ---
720
+ appPath | string | yes | The local .apk(s) path on the server filesystem or a remote url. | `/app/path.apk`
721
+ timeout | number | no | The count of milliseconds to wait until the app is installed.. 6000ms by default. | 120000
722
+ allowTestPackages | boolean | no | Set to true in order to allow test packages installation. false by default | true
723
+ useSdcard | boolean | no | Set to true to install the app on sdcard instead of the device memory. false by default | true
724
+ grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. false by default | true
725
+ replace | boolean | no | Set it to false if you don't want the application to be upgraded/reinstalled if it is already present on the device, but throw an error instead. true by default | false
726
+
599
727
  ### mobile: clearApp
600
728
 
601
729
  Deletes all data associated with a package. Calls `adb shell pm clear` under the hood.
@@ -153,7 +153,16 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
153
153
  listSms: 'mobileListSms',
154
154
  type: 'mobileType',
155
155
  sensorSet: 'sensorSet',
156
+ pushFile: 'mobilePushFile',
157
+ pullFile: 'mobilePullFile',
158
+ pullFolder: 'mobilePullFolder',
156
159
  deleteFile: 'mobileDeleteFile',
160
+ isAppInstalled: 'mobileIsAppInstalled',
161
+ queryAppState: 'mobileQueryAppState',
162
+ activateApp: 'mobileActivateApp',
163
+ removeApp: 'mobileRemoveApp',
164
+ terminateApp: 'mobileTerminateApp',
165
+ installApp: 'mobileInstallApp',
157
166
  clearApp: 'mobileClearApp',
158
167
  startActivity: 'mobileStartActivity',
159
168
  startService: 'mobileStartService',
@@ -256,4 +265,4 @@ commands.mobileInstallMultipleApks = async function (opts = {}) {
256
265
  Object.assign(extensions, commands, helpers);
257
266
  var _default = extensions;
258
267
  exports.default = _default;
259
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsImRlbGV0ZUZpbGUiLCJjbGVhckFwcCIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsImdldENvbnRleHRzIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImhhcyIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwibW9iaWxlVmlld3BvcnRTY3JlZW5zaG90IiwiZ2V0Vmlld3BvcnRTY3JlZW5zaG90IiwibW9iaWxlVmlld1BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0Iiwic2V0VXJsIiwidXJsIiwic3RhcnRVcmkiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsInR5cGVVbmljb2RlIiwibW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyIsImlzQXJyYXkiLCJhcGtzIiwiaXNFbXB0eSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgaWYgKCFsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gYXdhaXQgdGhpcy5hZGIuZ2V0RGV2aWNlTGFuZ3VhZ2UoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBObyBsYW5ndWFnZSBzcGVjaWZpZWQsIHJldHVybmluZyBzdHJpbmdzIGZvcjogJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8vIENsaWVudHMgcmVxdWlyZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgdG8gaGF2ZSBib3RoIGtleXNcbiAgLy8gYW5kIHZhbHVlcyBvZiB0eXBlIHN0cmluZ1xuICBjb25zdCBwcmVwcm9jZXNzU3RyaW5nc01hcCA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHN0cmluZ3NcbiAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG4gIH1cblxuICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgIXRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGFwcCkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHAgYXQgJyR7YXBwfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2Fwa1N0cmluZ3N9ID0gYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHRtcFJvb3QpO1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGFwa1N0cmluZ3M7XG4gICAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAoYXBrU3RyaW5ncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtFQUN4QyxPQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtFQUM1QyxNQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFtREssTUFBbkQsQ0FBTjtBQUNELENBRkQ7O0FBS0FWLFFBQVEsQ0FBQ1csUUFBVCxHQUFvQixnQkFBZ0JDLE9BQWhCLEVBQXlCQyxTQUF6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
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2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
@@ -155,8 +155,17 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
155
155
  type: 'mobileType',
156
156
  sensorSet: 'sensorSet',
157
157
 
158
+ pushFile: 'mobilePushFile',
159
+ pullFile: 'mobilePullFile',
160
+ pullFolder: 'mobilePullFolder',
158
161
  deleteFile: 'mobileDeleteFile',
159
162
 
163
+ isAppInstalled: 'mobileIsAppInstalled',
164
+ queryAppState: 'mobileQueryAppState',
165
+ activateApp: 'mobileActivateApp',
166
+ removeApp: 'mobileRemoveApp',
167
+ terminateApp: 'mobileTerminateApp',
168
+ installApp: 'mobileInstallApp',
160
169
  clearApp: 'mobileClearApp',
161
170
 
162
171
  startActivity: 'mobileStartActivity',