@opcua/for-node-red 2.0.4 → 2.0.6
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/DOC.md +60 -0
- package/README.md +5 -61
- package/package.json +9 -3
- package/source/OpcUa-Client2-Call/OpcUa-Client2-Call.css +2 -0
- package/source/OpcUa-Client2-Call/OpcUa-Client2-Call.html +50 -0
- package/source/OpcUa-Client2-Call/OpcUa-Client2-Call.js +2 -0
- package/source/OpcUa-Client2-Monitor/OpcUa-Client2-Monitor.css +2 -0
- package/source/OpcUa-Client2-Monitor/OpcUa-Client2-Monitor.html +171 -0
- package/source/OpcUa-Client2-Monitor/OpcUa-Client2-Monitor.js +2 -0
- package/source/OpcUa-Client2-MonitorEvent/OpcUa-Client2-MonitorEvent.css +2 -0
- package/source/OpcUa-Client2-MonitorEvent/OpcUa-Client2-MonitorEvent.html +95 -0
- package/source/OpcUa-Client2-MonitorEvent/OpcUa-Client2-MonitorEvent.js +2 -0
- package/source/OpcUa-Client2-Read/OpcUa-Client2-Read.css +2 -0
- package/source/OpcUa-Client2-Read/OpcUa-Client2-Read.html +50 -0
- package/source/OpcUa-Client2-Read/OpcUa-Client2-Read.js +2 -0
- package/source/OpcUa-Client2-Write/OpcUa-Client2-Write.css +2 -0
- package/source/OpcUa-Client2-Write/OpcUa-Client2-Write.html +49 -0
- package/source/OpcUa-Client2-Write/OpcUa-Client2-Write.js +2 -0
- package/source/OpcUa-Endpoint2/OpcUa-Endpoint2.css +2 -0
- package/source/OpcUa-Endpoint2/OpcUa-Endpoint2.html +371 -0
- package/source/OpcUa-Endpoint2/OpcUa-Endpoint2.js +2 -0
package/DOC.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
### Node palette
|
2
|
+
|
3
|
+

|
4
|
+
|
5
|
+
|
6
|
+
### specifying a endpoint connection
|
7
|
+
|
8
|
+

|
9
|
+
|
10
|
+
> the `check connection` button allows you to immediatly test your connection parameters and provide useful feedback to help you fix commonly found issues.
|
11
|
+
|
12
|
+

|
13
|
+
Three default subscriptions are automatically created for you:
|
14
|
+
Default (1 seconde), Fast (500ms) and Slow(5 secondes). They provide differents publishing intervals for the most common scenarii we usually find in typical IIoT applications. You can customize the parameter or delete or add new subscriptions if you wish.
|
15
|
+
Most of the time, only a few subscriptions are needed.
|
16
|
+
|
17
|
+
Note: The default subscription cannot be deleted, it serves as a mechanism to keep the connection always active with the server by handligng a keepalive packet, and serves as well in the automatic reconnection mechanism, in case of a network outage.
|
18
|
+
|
19
|
+
|
20
|
+
## setting up custom certificate
|
21
|
+
|
22
|
+
We provide a single PKI location shared with all Client connections.
|
23
|
+
The PKI is located in the following folder:
|
24
|
+
|
25
|
+
- Linux: `~/.node-red/opcua-for-node-red/PKI` folder
|
26
|
+
- macOS: `~/Library/Preferences/opcua-for-node-red-nodejs/PKI`
|
27
|
+
- Windows: `%APPDATA%\opcua-for-node-red-nodejs\PKI` (for example, `C:\Users\USERNAME\AppData\Roaming\opcua-for-node-red-nodejs\PKI`)
|
28
|
+
|
29
|
+
|
30
|
+
## Read
|
31
|
+
|
32
|
+

|
33
|
+
|
34
|
+
**NodeId** : you can specify here a nodeId or a browsePath (originated from the /Objects folder) or both.
|
35
|
+
|
36
|
+
For instance:
|
37
|
+
|
38
|
+
- ns=1;s=Temperature
|
39
|
+
- /2:MyDevice/1:MyTemperatureSensor/2:ParameterSet/3:Temperature
|
40
|
+
- \[/2:MyDevice/1:MyTemperatureSensor/2:ParameterSet/3:Temperature\](ns=1;s=Temperature)
|
41
|
+
|
42
|
+

|
43
|
+
|
44
|
+
You can also client on the `...` button to browse the OPCUA server and pick up the nodeId you are interested in.
|
45
|
+
|
46
|
+

|
47
|
+
|
48
|
+
|
49
|
+
**Note**: NodeID can also be left empty, if you intend to inject the NodeId by the `topic` attribute of an Inject node or with a OpcUa-Item.
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
## Write
|
54
|
+
|
55
|
+
## Call
|
56
|
+
|
57
|
+
## Monitor Variable
|
58
|
+
|
59
|
+

|
60
|
+
## Monitor Event
|
package/README.md
CHANGED
@@ -37,69 +37,10 @@ To install the node execute the following command inside the `.node-red`` direct
|
|
37
37
|
npm install @opcua/for-node-red
|
38
38
|
```
|
39
39
|
|
40
|
+
### how to use
|
40
41
|
|
41
|
-
|
42
|
+
see the [documentation](./DOC.md) guide for more information
|
42
43
|
|
43
|
-

|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
### specifying a endpoint connection
|
49
|
-
|
50
|
-

|
51
|
-
|
52
|
-
> the `check connection` button allows you to immediatly test your connection parameters and provide useful feedback to help you fix commonly found issues.
|
53
|
-
|
54
|
-

|
55
|
-
Three default subscriptions are automatically created for you:
|
56
|
-
Default (1 seconde), Fast (500ms) and Slow(5 secondes). They provide differents publishing intervals for the most common scenarii we usually find in typical IIoT applications. You can customize the parameter or delete or add new subscriptions if you wish.
|
57
|
-
Most of the time, only a few subscriptions are needed.
|
58
|
-
|
59
|
-
Note: The default subscription cannot be deleted, it serves as a mechanism to keep the connection always active with the server by handligng a keepalive packet, and serves as well in the automatic reconnection mechanism, in case of a network outage.
|
60
|
-
|
61
|
-
|
62
|
-
## setting up custom certificate
|
63
|
-
|
64
|
-
We provide a single PKI location shared with all Client connections.
|
65
|
-
The PKI is located in the following folder:
|
66
|
-
|
67
|
-
- Linux: `~/.node-red/opcua-for-node-red/PKI` folder
|
68
|
-
- macOS: `~/Library/Preferences/opcua-for-node-red-nodejs/PKI`
|
69
|
-
- Windows: `%APPDATA%\opcua-for-node-red-nodejs\PKI` (for example, `C:\Users\USERNAME\AppData\Roaming\opcua-for-node-red-nodejs\PKI`)
|
70
|
-
|
71
|
-
|
72
|
-
## Read
|
73
|
-
|
74
|
-

|
75
|
-
|
76
|
-
**NodeId** : you can specify here a nodeId or a browsePath (originated from the /Objects folder) or both.
|
77
|
-
|
78
|
-
For instance:
|
79
|
-
|
80
|
-
- ns=1;s=Temperature
|
81
|
-
- /2:MyDevice/1:MyTemperatureSensor/2:ParameterSet/3:Temperature
|
82
|
-
- \[/2:MyDevice/1:MyTemperatureSensor/2:ParameterSet/3:Temperature\](ns=1;s=Temperature)
|
83
|
-
|
84
|
-

|
85
|
-
|
86
|
-
You can also client on the `...` button to browse the OPCUA server and pick up the nodeId you are interested in.
|
87
|
-
|
88
|
-

|
89
|
-
|
90
|
-
|
91
|
-
**Note**: NodeID can also be left empty, if you intend to inject the NodeId by the `topic` attribute of an Inject node or with a OpcUa-Item.
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
## Write
|
96
|
-
|
97
|
-
## Call
|
98
|
-
|
99
|
-
## Monitor Variable
|
100
|
-
|
101
|
-

|
102
|
-
## Monitor Event
|
103
44
|
|
104
45
|
|
105
46
|
## Getting access to the professional edition
|
@@ -107,4 +48,7 @@ You can also client on the `...` button to browse the OPCUA server and pick up t
|
|
107
48
|
- send your request to contact@sterfive.com to claim access to the professional edition
|
108
49
|
|
109
50
|
|
51
|
+
## Copyright and Licence
|
52
|
+
|
53
|
+
Copyrigth (c) Sterfive SAS 2017-2023, under [proprietary licence](./LICENSE.md).
|
110
54
|
|
package/package.json
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"name": "@opcua/for-node-red",
|
3
|
-
"version": "2.0.
|
3
|
+
"version": "2.0.6",
|
4
4
|
"description": "The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
7
7
|
"url": "git@github.com:sterfive/opcua-for-node-red-public.git"
|
8
8
|
},
|
9
9
|
"engines": {
|
10
|
-
"node": ">=18"
|
10
|
+
"node": ">=18.0.0"
|
11
11
|
},
|
12
12
|
"keywords": [
|
13
13
|
"node-red",
|
@@ -39,7 +39,13 @@
|
|
39
39
|
"OpcUa-Client2-Write": "./source/OpcUa-Client2-Write/OpcUa-Client2-Write.js"
|
40
40
|
}
|
41
41
|
},
|
42
|
-
"dependencies": {
|
42
|
+
"dependencies": {
|
43
|
+
"node-opcua": "2.116.0",
|
44
|
+
"node-opcua-json": "0.50.0",
|
45
|
+
"antlr4ts": "0.5.0-alpha.4",
|
46
|
+
"body-parser": "^1.20.2",
|
47
|
+
"boxen": "5"
|
48
|
+
},
|
43
49
|
"directories": {
|
44
50
|
"example": "examples"
|
45
51
|
},
|
@@ -0,0 +1,2 @@
|
|
1
|
+
.sterfve-combo-box{position:relative;width:100%}.sterfve-combo-box .sterfve-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:150px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfve-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-left:15px}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.input-group{align-items:center;border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.input-group input{border:none;flex:1;outline:none;padding:8px}.input-group button{background-color:#f1f1f1;border:none;border-left:1px solid #ccc;cursor:pointer;padding:8px 16px}.input-group button:hover{background-color:#ddd}.info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfve-combo-box .sterfve-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003}
|
2
|
+
/*# sourceMappingURL=OpcUa-Client2-Call.css.map */
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<style>
|
2
|
+
.sterfve-combo-box{position:relative;width:100%}.sterfve-combo-box .sterfve-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:150px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfve-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-left:15px}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.input-group{align-items:center;border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.input-group input{border:none;flex:1;outline:none;padding:8px}.input-group button{background-color:#f1f1f1;border:none;border-left:1px solid #ccc;cursor:pointer;padding:8px 16px}.input-group button:hover{background-color:#ddd}.info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfve-combo-box .sterfve-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003}
|
3
|
+
/*# sourceMappingURL=OpcUa-Client2-Call.css.map */
|
4
|
+
</style>
|
5
|
+
|
6
|
+
<script type="text/javascript">
|
7
|
+
function _0x13a9(_0x130130,_0x25e194){const _0x4d945b=_0x4d94();return _0x13a9=function(_0x13a9c3,_0x28ff15){_0x13a9c3=_0x13a9c3-0x1c3;let _0x249515=_0x4d945b[_0x13a9c3];return _0x249515;},_0x13a9(_0x130130,_0x25e194);}function _0x4d94(){const _0x5ccdd5=['fetched','element','isArray','registerType','dataType','replaceWith','!!failure!!','/opcua-endpoint2/argumentDefinition','length','fa-list-alt','inputs','12bqHYjI','fa-question','$tree','<input\x20type=\x22text\x22>','log','</p>','$input','Both','map','expandable','message','filter','outputArguments','then','valueRank','Forward','sterfive-info','fa-object-group','sterfve-dropdown','#method-input-argument-definition','i=35','text','verify','OPCUA-Call','nodeId','editableList','sterfve-combo-box','#node-input-endpoint',';\x22></i>\x20','password','expandable\x20expanded','ns=0;i=46','5bSgYyP','Objects','$inputGroup','offset','read','$combo','fa-sliders','apply','typeDefinition','DarkOrange','extra','right','$verifyBtn','../../icons/opcuanodeLogo.png','reset','userIdentityType','158778aFFfTb','\x20Fetching\x20done','fetched\x20:\x20','target','pageY','ObjectType',':visible','baseUrl','$dropdown','Variable','<div\x20class=\x22spinner\x22></div>','7JCqGBn','hasClass','application/json','split','throw','input-group','OpcUa-Endpoint2','nodes','</li>','suppressed','change','click','Method','displayName','endpointNode','data','parentNode','dataTypes','Unspecified','60018nATIbi','stringify','Bad','toString','$toggleTreeBtn','<p>','nodeClass','enter\x20a\x20nodeId\x20or\x20a\x20browsePath\x20','css','<li><i\x20class=\x22fa\x20','currentParent','-messages','827286gpTCUL','left','statusCode','argumentDefinition','arguments','VariableType','toggleClass','userCertificate','1294192sKcAIU','hide','val','auto','node_label_italic','isSelectable','references','securityMode','show','removeClass','3019940fIttqF','fechting\x20failed\x20with\x20error','node','append','SuppressedError','#node-input-objectId','toggle','remove','UserName','ns=0;i=47','options','find','Calling\x20nodeBrowser\x20Done','$info','HasChild','err','DodgerBlue','already\x20fetched','ns=0;i=35','endpoint','internal\x20error\x20','fa-folder','placeholder','Invalid','appendTo','Testing\x20Connection\x20...','HasComponent','validate','replace','xxxxx','value','referenceTypeId','browseName','SteelBlue','/checkNodeId','<button><i\x20class=\x22fa\x20fa-flask\x22></i></button>','#C0DEED','function','name','ns=0;i=61','-failure','top','resolveParentNode','<br>','1206630pxPnXw','assign','trigger','DataType','json','status','<div\x20class=\x22argument-entry\x22>','empty','attr','<div/>','userName','fa-cog','ns=0;i=85','loading','addClass','-success','CadetBlue','#validate-call-arguments-button','statusText','userPrivatekey','failure','browseResult','<button><i\x20class=\x22fa\x20fa-sitemap\x22></i></button>','/opcua-endpoint2','Organizes','POST','html','Object','Inverse','<li><i\x20class=\x22fa\x20fa-error\x22\x20style=\x22color:red;\x22></i>no\x20reference\x20!<ul></ul></li>','View','nodeBrowser','children','#method-output-argument-definition','pageX','widget','done','result','ReferenceType','50%','expanded','sterfive.nodeBrowser','reference','already\x20loading','closest','join','28604bBQKYX','OpcUa-Client2-Call','<ul></ul></li>'];_0x4d94=function(){return _0x5ccdd5;};return _0x4d94();}(function(_0x590b31,_0xf9d9b7){const _0x48fd77=_0x13a9,_0x400572=_0x590b31();while(!![]){try{const _0x371add=-parseInt(_0x48fd77(0x1f7))/0x1+parseInt(_0x48fd77(0x1d9))/0x2+-parseInt(_0x48fd77(0x27d))/0x3*(parseInt(_0x48fd77(0x26f))/0x4)+parseInt(_0x48fd77(0x1c9))/0x5*(-parseInt(_0x48fd77(0x203))/0x6)+parseInt(_0x48fd77(0x1e4))/0x7*(-parseInt(_0x48fd77(0x20b))/0x8)+parseInt(_0x48fd77(0x241))/0x9+parseInt(_0x48fd77(0x215))/0xa;if(_0x371add===_0xf9d9b7)break;else _0x400572['push'](_0x400572['shift']());}catch(_0x21ebda){_0x400572['push'](_0x400572['shift']());}}}(_0x4d94,0x1f0c8),(function(){'use strict';const _0x934216=_0x13a9;function _0x40b27f(_0x5a8d60,_0x443427,_0x30ae45,_0x5345b4){function _0x52a1d8(_0x5366c2){return _0x5366c2 instanceof _0x30ae45?_0x5366c2:new _0x30ae45(function(_0x351ffd){_0x351ffd(_0x5366c2);});}return new(_0x30ae45||(_0x30ae45=Promise))(function(_0x183d1d,_0x260807){const _0x2b27fc=_0x13a9;function _0x5eec2a(_0x579cf4){try{_0x1e34d9(_0x5345b4['next'](_0x579cf4));}catch(_0x5c6bdb){_0x260807(_0x5c6bdb);}}function _0x1629d2(_0x43d871){const _0x1a3044=_0x13a9;try{_0x1e34d9(_0x5345b4[_0x1a3044(0x1e8)](_0x43d871));}catch(_0x1e05b0){_0x260807(_0x1e05b0);}}function _0x1e34d9(_0x4a274c){const _0x620913=_0x13a9;_0x4a274c[_0x620913(0x265)]?_0x183d1d(_0x4a274c[_0x620913(0x233)]):_0x52a1d8(_0x4a274c[_0x620913(0x233)])[_0x620913(0x28a)](_0x5eec2a,_0x1629d2);}_0x1e34d9((_0x5345b4=_0x5345b4[_0x2b27fc(0x1d0)](_0x5a8d60,_0x443427||[]))['next']());});}typeof SuppressedError===_0x934216(0x23a)?SuppressedError:function(_0x10502d,_0x16229f,_0x430671){const _0x461464=_0x934216;var _0xced8a2=new Error(_0x430671);return _0xced8a2[_0x461464(0x23b)]=_0x461464(0x219),_0xced8a2['error']=_0x10502d,_0xced8a2[_0x461464(0x1ed)]=_0x16229f,_0xced8a2;};var _0x4541b4;(function(_0x557a6e){const _0x70fa90=_0x934216;_0x557a6e[_0x557a6e[_0x70fa90(0x28c)]=0x0]='Forward',_0x557a6e[_0x557a6e[_0x70fa90(0x25d)]=0x1]=_0x70fa90(0x25d),_0x557a6e[_0x557a6e[_0x70fa90(0x284)]=0x2]=_0x70fa90(0x284),_0x557a6e[_0x557a6e['Invalid']=0x3]=_0x70fa90(0x22c);}(_0x4541b4||(_0x4541b4={})));var _0x57f039;(function(_0x471c64){const _0x299e9f=_0x934216;_0x471c64[_0x471c64[_0x299e9f(0x1f6)]=0x0]=_0x299e9f(0x1f6),_0x471c64[_0x471c64[_0x299e9f(0x25c)]=0x1]='Object',_0x471c64[_0x471c64[_0x299e9f(0x1e2)]=0x2]=_0x299e9f(0x1e2),_0x471c64[_0x471c64[_0x299e9f(0x1f0)]=0x4]=_0x299e9f(0x1f0),_0x471c64[_0x471c64[_0x299e9f(0x1de)]=0x8]=_0x299e9f(0x1de),_0x471c64[_0x471c64['VariableType']=0x10]=_0x299e9f(0x208),_0x471c64[_0x471c64[_0x299e9f(0x267)]=0x20]=_0x299e9f(0x267),_0x471c64[_0x471c64['DataType']=0x40]=_0x299e9f(0x244),_0x471c64[_0x471c64[_0x299e9f(0x25f)]=0x80]=_0x299e9f(0x25f);}(_0x57f039||(_0x57f039={})));function _0x1d08bb(_0x44179c){const _0x41aae8=_0x934216;switch(_0x44179c){case'Organizes':return _0x41aae8(0x291);case _0x41aae8(0x22f):return'i=47';case'HasChild':return'i=34';}}const _0x1fcfac=_0x934216(0x227),_0x55856e=_0x934216(0x23c),_0x57cf53=_0x934216(0x21e),_0xc0755=_0x934216(0x1c8),_0x4542d1=_0x3fe950=>{const _0x3cbd84=_0x934216;switch(_0x3fe950['nodeClass']){case _0x3cbd84(0x25c):if(_0x3fe950['referenceTypeId']===_0x1fcfac);if(_0x3fe950[_0x3cbd84(0x1d1)]===_0x55856e||_0x3fe950[_0x3cbd84(0x234)]==='i=61')return{'icon':_0x3cbd84(0x22a),'color':'rgba(61,\x2060,\x204,\x200.525)'};return{'icon':_0x3cbd84(0x28e),'color':'SeaGreen'};case _0x3cbd84(0x1e2):if(_0x3fe950[_0x3cbd84(0x234)]===_0x57cf53)return{'icon':'fa-list-alt','color':_0x3cbd84(0x236)};else return _0x3fe950['referenceTypeId']===_0xc0755?{'icon':_0x3cbd84(0x27b),'color':_0x3cbd84(0x225)}:{'icon':_0x3cbd84(0x27b),'color':_0x3cbd84(0x251)};case _0x3cbd84(0x1f0):return{'icon':_0x3cbd84(0x24c),'color':'SandyBrown'};case _0x3cbd84(0x1de):return{'icon':_0x3cbd84(0x28e),'color':_0x3cbd84(0x1d2)};case _0x3cbd84(0x208):return{'icon':_0x3cbd84(0x1cf),'color':_0x3cbd84(0x1d2)};}return{'icon':_0x3cbd84(0x27e),'color':'grey'};},_0x43f86d=({endpointNode:_0x3dcc75,endpoint:_0x479f85,baseUrl:_0x54765b},_0x59d834,_0x564f0d)=>_0x40b27f(void 0x0,void 0x0,void 0x0,function*(){const _0x34ac86=_0x934216,_0x350a4c=_0x54765b+_0x34ac86(0x258),_0x5bc2a0=_0x350a4c+'/browse',_0x106d7d=Object[_0x34ac86(0x242)](Object[_0x34ac86(0x242)]({},_0x564f0d),{'nodeId':_0x59d834,'resultMask':0x3f}),_0x567b60=yield fetch(_0x5bc2a0,{'method':_0x34ac86(0x25a),'body':JSON[_0x34ac86(0x1f8)]({'endpointNode':_0x3dcc75,'endpoint':_0x479f85,'browseDescription':_0x106d7d}),'headers':{'Content-Type':_0x34ac86(0x1e6)}});if(_0x567b60[_0x34ac86(0x246)]!==0xc8)return console[_0x34ac86(0x281)](_0x34ac86(0x216),_0x567b60[_0x34ac86(0x246)],_0x567b60['statusText']),{'references':[]};console['log'](_0x34ac86(0x1db),_0x567b60[_0x34ac86(0x246)],_0x567b60[_0x34ac86(0x253)]);const _0xa01db0=yield _0x567b60[_0x34ac86(0x245)](),_0x55a955=_0xa01db0[_0x34ac86(0x256)]['references']||[];return{'references':_0x55a955};}),_0x399fbd={'referenceTypeId':_0x1d08bb(_0x934216(0x223)),'includeSubtypes':!![],'browseDirection':_0x4541b4[_0x934216(0x28c)],'nodeClassMask':_0x57f039[_0x934216(0x1e2)]|_0x57f039[_0x934216(0x25c)]|_0x57f039[_0x934216(0x1f0)],'resultMask':0x3f},_0x25d9a9={'referenceTypeId':_0x1d08bb(_0x934216(0x259)),'includeSubtypes':!![],'browseDirection':_0x4541b4['Forward'],'nodeClassMask':_0x57f039[_0x934216(0x1e2)]|_0x57f039[_0x934216(0x25c)]|_0x57f039[_0x934216(0x1f0)],'resultMask':0x3f},_0x20a19a=({endpointNode:_0x290882,endpoint:_0x5386d2,baseUrl:_0x46fa8f},_0x5b44ea,_0x3792b2)=>_0x40b27f(void 0x0,void 0x0,void 0x0,function*(){const _0x743a2c=_0x934216,_0x71a058=_0x46fa8f+_0x743a2c(0x258),_0x55d7d0=_0x5b44ea[_0x743a2c(0x20d)](),_0x1fcaa0=yield fetch(_0x71a058+'/checkNodeId',{'method':_0x743a2c(0x25a),'body':JSON[_0x743a2c(0x1f8)]({'endpointNode':_0x290882,'endpoint':_0x5386d2,'nodeId':_0x55d7d0}),'headers':{'Content-Type':_0x743a2c(0x1e6)}}),_0x30ffb1=(_0x8d13b1,_0x531d)=>{const _0x2451fc=_0x743a2c;_0x3792b2[_0x2451fc(0x292)](_0x8d13b1)[_0x2451fc(0x24f)](_0x2451fc(0x28d))[_0x2451fc(0x24f)](_0x531d),_0x3792b2[_0x2451fc(0x213)](),setTimeout(()=>{const _0xcd253b=_0x2451fc;_0x3792b2[_0xcd253b(0x214)](_0x531d),_0x3792b2[_0xcd253b(0x20c)]();},0xbb8);},_0x51d47f=yield _0x1fcaa0['json']();_0x1fcaa0['status']!==0xc8?_0x30ffb1(_0x743a2c(0x278)+_0x55d7d0,_0x743a2c(0x255)):_0x51d47f[_0x743a2c(0x205)]['match'](/Good/)?(_0x5b44ea[_0x743a2c(0x20d)](_0x51d47f['nodeAddressString']),_0x5b44ea['trigger'](_0x743a2c(0x1ee)),_0x30ffb1('Good','ok')):(_0x5b44ea['val'](''+_0x55d7d0),_0x30ffb1(_0x51d47f[_0x743a2c(0x205)]+'\x20'+_0x1fcaa0[_0x743a2c(0x253)],_0x743a2c(0x255)));});function _0x4dd4f4(_0x5dca44,_0x5cdb3b){return _0x40b27f(this,void 0x0,void 0x0,function*(){const _0x1d88fa=_0x13a9,_0x292156=_0x5dca44['data']('value'),_0x3d98c1=yield _0x43f86d(_0x5cdb3b,_0x292156,_0x399fbd),_0xb8d9ea=yield _0x43f86d(_0x5cdb3b,_0x292156,_0x25d9a9);return{'references':[..._0x3d98c1[_0x1d88fa(0x211)],..._0xb8d9ea[_0x1d88fa(0x211)]]};});}const _0x4463fd=_0x29ce7a=>{const _0x298eba=_0x934216;var _0x50f0d8,_0xe00b91;if(!_0x29ce7a){const _0x48cefd=$(_0x298eba(0x25e));return _0x48cefd;}const _0xab728d=_0x29ce7a['nodeId']['toString'](),_0x693031=((_0x50f0d8=_0x29ce7a['displayName'])===null||_0x50f0d8===void 0x0?void 0x0:_0x50f0d8[_0x298eba(0x292)])||((_0xe00b91=_0x29ce7a[_0x298eba(0x235)])===null||_0xe00b91===void 0x0?void 0x0:_0xe00b91[_0x298eba(0x23b)])||_0x29ce7a['nodeId']['toString'](),{icon:_0x5ed4a3,color:_0x56de34}=_0x4542d1(_0x29ce7a),_0x4b6d77=$(_0x298eba(0x200)+_0x5ed4a3+'\x22\x20style=\x22color:'+_0x56de34+_0x298eba(0x1c5)+_0x693031+_0x298eba(0x271));return _0x4b6d77['addClass']('expandable'),_0x4b6d77[_0x298eba(0x1f3)]('value',_0xab728d),_0x4b6d77[_0x298eba(0x1f3)](_0x298eba(0x26b),_0x29ce7a),_0x4b6d77;},_0x1173f6=()=>{const _0x24d4a6=_0x934216;$[_0x24d4a6(0x264)](_0x24d4a6(0x26a),{'options':{'endpointNode':()=>({'endpoint':'opc.tcp://opcuademo.sterfive.com:26543'}),'endpoint':()=>undefined,'parentNode':()=>({'browseName':{'namespaceIndex':0x0,'name':_0x24d4a6(0x1ca)},'nodeClass':'Object','nodeId':_0x24d4a6(0x24d),'displayName':{'text':_0x24d4a6(0x1ca)},'typeDefinition':_0x55856e}),'filter':()=>!![],'baseUrl':''},'resolveParentNode'(){return _0x40b27f(this,void 0x0,void 0x0,function*(){const _0x112b3f=_0x13a9,_0x3ccd30=this,_0x3443f5=typeof _0x3ccd30[_0x112b3f(0x21f)]['parentNode']===_0x112b3f(0x23a)?_0x3ccd30[_0x112b3f(0x21f)][_0x112b3f(0x1f4)]():_0x3ccd30['options']['parentNode'];if(_0x3443f5 instanceof Promise)return yield _0x3443f5;return _0x3443f5;});},'reset'(){const _0x3b8150=_0x24d4a6,_0x288362=this;_0x288362[_0x3b8150(0x27f)][_0x3b8150(0x248)](),this[_0x3b8150(0x23f)]()[_0x3b8150(0x28a)](_0x5e2a05=>{const _0x20a6a6=_0x3b8150,_0x34fff1=_0x4463fd(_0x5e2a05);_0x288362[_0x20a6a6(0x27f)][_0x20a6a6(0x218)](_0x34fff1),_0x288362[_0x20a6a6(0x201)]=_0x5e2a05;});},'verify'(){const _0x42246e=_0x24d4a6,_0xc5ae48=this,_0x32a1b9={'baseUrl':_0xc5ae48[_0x42246e(0x21f)][_0x42246e(0x1e0)],'endpointNode':typeof _0xc5ae48[_0x42246e(0x21f)]['endpointNode']===_0x42246e(0x23a)?_0xc5ae48[_0x42246e(0x21f)]['endpointNode']():_0xc5ae48[_0x42246e(0x21f)][_0x42246e(0x1f2)],'endpoint':typeof _0xc5ae48[_0x42246e(0x21f)][_0x42246e(0x228)]===_0x42246e(0x23a)?_0xc5ae48[_0x42246e(0x21f)][_0x42246e(0x228)]():_0xc5ae48[_0x42246e(0x21f)]['endpoint']};_0x20a19a(_0x32a1b9,_0xc5ae48[_0x42246e(0x283)],_0xc5ae48['$info']);},'_create'(){const _0x438772=_0x24d4a6,_0x380431=this;function _0x291c7f(_0x44a58e,_0x107719,_0xd55a2){return _0x40b27f(this,void 0x0,void 0x0,function*(){const _0x5addd7=_0x13a9;if(_0x44a58e[_0x5addd7(0x1e5)](_0x5addd7(0x272))){console['log'](_0x5addd7(0x226));return;}if(_0x44a58e['hasClass'](_0x5addd7(0x24e))){console['log'](_0x5addd7(0x26c));return;}_0x44a58e[_0x5addd7(0x24f)](_0x5addd7(0x24e)),_0x44a58e[_0x5addd7(0x218)](_0x5addd7(0x1e3));try{_0x44a58e[_0x5addd7(0x261)]('ul')[_0x5addd7(0x248)]();const {references:_0x3c36a6}=yield _0x107719(_0x44a58e,_0xd55a2);for(const _0x203ee4 of _0x3c36a6){if(_0x380431[_0x5addd7(0x21f)][_0x5addd7(0x288)]&&!_0x380431[_0x5addd7(0x21f)][_0x5addd7(0x288)](_0x203ee4))continue;const _0x5b6d05=_0x4463fd(_0x203ee4);_0x44a58e['children']('ul')['append'](_0x5b6d05);}_0x44a58e[_0x5addd7(0x24f)](_0x5addd7(0x272));}catch(_0x4db214){_0x44a58e['children']('ul')[_0x5addd7(0x218)]('<li>error\x20'+_0x4db214['message']+_0x5addd7(0x1ec)),console[_0x5addd7(0x281)](_0x5addd7(0x224),_0x4db214);}_0x44a58e[_0x5addd7(0x220)]('.spinner')[_0x5addd7(0x21c)](),_0x44a58e[_0x5addd7(0x214)]('loading');});}_0x380431[_0x438772(0x283)]=this[_0x438772(0x273)],_0x380431['$combo']=$(_0x438772(0x24a)),_0x380431[_0x438772(0x1ce)][_0x438772(0x24f)](_0x438772(0x1c3)),this[_0x438772(0x273)][_0x438772(0x277)](_0x380431['$combo']),_0x380431['$inputGroup']=$(_0x438772(0x24a))[_0x438772(0x24f)](_0x438772(0x1e9)),_0x380431['$combo'][_0x438772(0x218)](_0x380431['$inputGroup']),_0x380431[_0x438772(0x1cb)]['append'](_0x380431['$input']),_0x380431[_0x438772(0x1fb)]=$(_0x438772(0x257)),_0x380431[_0x438772(0x1cb)]['append'](_0x380431[_0x438772(0x1fb)]),_0x380431[_0x438772(0x1fb)]['on']('click',function(){const _0x101a74=_0x438772;!_0x380431[_0x101a74(0x1e1)]['is'](_0x101a74(0x1df))&&(_0x380431['resolveParentNode']()[_0x101a74(0x28a)](_0x1bf256=>{const _0x14f6e5=_0x101a74;var _0x2bd161;(_0x1bf256!==_0x380431[_0x14f6e5(0x201)]||((_0x2bd161=_0x380431['currentParent'])===null||_0x2bd161===void 0x0?void 0x0:_0x2bd161[_0x14f6e5(0x295)])!==_0x1bf256['nodeId'])&&_0x380431[_0x14f6e5(0x1d7)]();}),_0x380431['$info'][_0x101a74(0x20c)]()),_0x380431[_0x101a74(0x1e1)][_0x101a74(0x21b)]();}),_0x380431[_0x438772(0x1d5)]=$(_0x438772(0x238)),_0x380431[_0x438772(0x1cb)][_0x438772(0x218)](_0x380431['$verifyBtn']),_0x380431[_0x438772(0x1d5)]['on']('click',()=>{const _0x11be4c=_0x438772;this[_0x11be4c(0x293)]();}),!_0x380431[_0x438772(0x283)][_0x438772(0x249)](_0x438772(0x22b))&&_0x380431[_0x438772(0x283)][_0x438772(0x249)](_0x438772(0x22b),_0x438772(0x1fe)),_0x380431['$info']=$('<div\x20class=\x22info-text\x22></div>'),_0x380431[_0x438772(0x222)][_0x438772(0x20c)](),{'baseUrl':_0x380431[_0x438772(0x21f)][_0x438772(0x1e0)],'endpointNode':typeof _0x380431[_0x438772(0x21f)]['endpointNode']===_0x438772(0x23a)?_0x380431[_0x438772(0x21f)][_0x438772(0x1f2)]():_0x380431[_0x438772(0x21f)][_0x438772(0x1f2)],'endpoint':typeof _0x380431[_0x438772(0x21f)]['endpoint']==='function'?_0x380431[_0x438772(0x21f)][_0x438772(0x228)]():_0x380431[_0x438772(0x21f)][_0x438772(0x228)]},_0x380431[_0x438772(0x1e1)]=$(_0x438772(0x24a))['addClass'](_0x438772(0x28f))[_0x438772(0x20c)](),_0x380431[_0x438772(0x1ce)]['append'](_0x380431[_0x438772(0x222)]),_0x380431[_0x438772(0x1ce)][_0x438772(0x218)](_0x380431[_0x438772(0x1e1)]),_0x380431[_0x438772(0x27f)]=$('<ul\x20class=\x22sterfive-tree\x22></ul>')['appendTo'](_0x380431['$dropdown']),this[_0x438772(0x1d7)](),_0x380431[_0x438772(0x27f)]['on'](_0x438772(0x1ef),'li',function(_0x2b8d17){const _0xee1c8a=_0x438772;var _0x2fe739,_0x2ad459;_0x2b8d17['stopPropagation']();let _0x1b8af5=$(this);const _0x278ad7=0x14,_0x293d10=0x14,_0x4c7c5c=$(this)[_0xee1c8a(0x1cc)](),_0x491137=_0x2b8d17;if(_0x491137[_0xee1c8a(0x263)]>=_0x4c7c5c[_0xee1c8a(0x204)]&&_0x491137[_0xee1c8a(0x263)]<=_0x4c7c5c[_0xee1c8a(0x204)]+_0x278ad7&&_0x491137['pageY']>=_0x4c7c5c[_0xee1c8a(0x23e)]&&_0x491137[_0xee1c8a(0x1dd)]<=_0x4c7c5c['top']+_0x293d10){if(_0x1b8af5['hasClass'](_0xee1c8a(0x286))){if(_0x1b8af5[_0xee1c8a(0x1e5)](_0xee1c8a(0x272))){_0x1b8af5[_0xee1c8a(0x214)](_0xee1c8a(0x286))['addClass']('expanded'),_0x1b8af5[_0xee1c8a(0x261)]('ul')['toggle']();return;}const _0x398bd9={'baseUrl':_0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x1e0)],'endpointNode':typeof _0x380431['options'][_0xee1c8a(0x1f2)]===_0xee1c8a(0x23a)?_0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x1f2)]():_0x380431[_0xee1c8a(0x21f)]['endpointNode'],'endpoint':typeof _0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x228)]===_0xee1c8a(0x23a)?_0x380431['options'][_0xee1c8a(0x228)]():_0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x228)]};_0x291c7f(_0x1b8af5,_0x4dd4f4,_0x398bd9)['then'](()=>{const _0x375cd1=_0xee1c8a;console[_0x375cd1(0x281)](_0x375cd1(0x1da)),console[_0x375cd1(0x281)](_0x375cd1(0x272)),_0x1b8af5[_0x375cd1(0x214)](_0x375cd1(0x286))[_0x375cd1(0x24f)](_0x375cd1(0x269));})['catch'](_0x157f8e=>{const _0x548d48=_0xee1c8a;_0x1b8af5['removeClass'](_0x548d48(0x286))[_0x548d48(0x24f)](_0x548d48(0x269)),console[_0x548d48(0x281)]('error',_0x157f8e);});}else{if(_0x1b8af5[_0xee1c8a(0x1e5)](_0xee1c8a(0x269)))_0x1b8af5[_0xee1c8a(0x261)]('ul')['toggle'](),_0x1b8af5[_0xee1c8a(0x209)](_0xee1c8a(0x1c7));else{if(_0x1b8af5[_0xee1c8a(0x261)]('ul')[_0xee1c8a(0x261)]()[_0xee1c8a(0x27a)]>0x0)_0x1b8af5[_0xee1c8a(0x261)]('ul')['toggle'](),_0x1b8af5[_0xee1c8a(0x209)](_0xee1c8a(0x1c7));else;}}}else{const _0x46b09b=_0x1b8af5[_0xee1c8a(0x1f3)](_0xee1c8a(0x233)),_0x186d05=_0x1b8af5[_0xee1c8a(0x1f3)](_0xee1c8a(0x26b));if(_0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x210)]&&!_0x380431[_0xee1c8a(0x21f)][_0xee1c8a(0x210)](_0x186d05))return;_0x380431[_0xee1c8a(0x283)][_0xee1c8a(0x1f3)](_0xee1c8a(0x26b),_0x186d05);const _0x4844a4=((_0x2fe739=_0x186d05[_0xee1c8a(0x1f1)])===null||_0x2fe739===void 0x0?void 0x0:_0x2fe739[_0xee1c8a(0x292)])||((_0x2ad459=_0x186d05[_0xee1c8a(0x235)])===null||_0x2ad459===void 0x0?void 0x0:_0x2ad459[_0xee1c8a(0x23b)])||_0x186d05[_0xee1c8a(0x295)]['toString'](),_0x84943f='['+_0x4844a4+']('+_0x46b09b+')';_0x380431[_0xee1c8a(0x283)]['val'](_0x84943f),_0x380431[_0xee1c8a(0x283)][_0xee1c8a(0x243)](_0xee1c8a(0x1ee)),_0x380431[_0xee1c8a(0x1e1)]['hide']();}}),$(document)['on'](_0x438772(0x1ef),function(_0xd66f79){const _0x5a9cc6=_0x438772;!$(_0xd66f79[_0x5a9cc6(0x1dc)])[_0x5a9cc6(0x26d)](_0x380431['$combo'])[_0x5a9cc6(0x27a)]&&_0x380431[_0x5a9cc6(0x1e1)][_0x5a9cc6(0x20c)]();});}});},_0x4e1468=({endpointNode:_0x224095,endpoint:_0x3cb9ee,baseUrl:_0x237eea},_0x33c50c)=>_0x40b27f(void 0x0,void 0x0,void 0x0,function*(){const _0x109235=_0x934216,_0x4a6af1=_0x237eea+_0x109235(0x258),_0x11e313=_0x4a6af1+_0x109235(0x237),_0x210515=yield fetch(_0x11e313,{'method':_0x109235(0x25a),'body':JSON[_0x109235(0x1f8)]({'endpointNode':_0x224095,'endpoint':_0x3cb9ee,'nodeId':_0x33c50c}),'headers':{'Content-Type':_0x109235(0x1e6)}});if(_0x210515['status']!==0xc8){console[_0x109235(0x281)](_0x109235(0x216),_0x210515[_0x109235(0x246)],_0x210515[_0x109235(0x253)]);const _0x5b859d={'statusCode':_0x109235(0x1f9),'nodeAddressString':_0x33c50c};return _0x5b859d;}console[_0x109235(0x281)](_0x109235(0x1db),_0x210515[_0x109235(0x246)],_0x210515['statusText']);const _0xd516ce=yield _0x210515[_0x109235(0x245)]();return _0xd516ce;});function _0x142104(_0x3cdeca,_0x41e05b,_0x4617ce,_0x18623d){const _0x1bdbe9=_0x934216,_0x58a72d=$('#'+_0x3cdeca+_0x1bdbe9(0x250)),_0x26ac34=$('#'+_0x3cdeca+_0x1bdbe9(0x23d)),_0x43fda1=$('#'+_0x3cdeca+'-pending'),_0x57deb1=$('#'+_0x3cdeca+_0x1bdbe9(0x202));let _0x306810=![];_0x58a72d[_0x1bdbe9(0x20c)](),_0x26ac34[_0x1bdbe9(0x20c)](),_0x43fda1[_0x1bdbe9(0x20c)](),_0x41e05b['on'](_0x1bdbe9(0x1ef),()=>{const _0x32060d=_0x1bdbe9;if(_0x306810)return;_0x306810=!![],_0x43fda1[_0x32060d(0x214)](_0x32060d(0x20c)),_0x43fda1['html'](_0x32060d(0x22e)),_0x58a72d[_0x32060d(0x24f)](_0x32060d(0x20c)),_0x26ac34[_0x32060d(0x24f)]('hide'),_0x57deb1[_0x32060d(0x25b)]('');const {body:_0x5a18ee,url:_0x25fda3}=_0x4617ce();console['log'](_0x32060d(0x232),_0x5a18ee),fetch(_0x25fda3,{'method':_0x32060d(0x25a),'headers':{'Content-Type':_0x32060d(0x1e6)},'body':JSON[_0x32060d(0x1f8)](_0x5a18ee)})[_0x32060d(0x28a)](_0x4f9dd9=>_0x4f9dd9[_0x32060d(0x245)]())[_0x32060d(0x28a)](_0x48db16=>{const _0x543d46=_0x32060d;_0x306810=![],_0x43fda1[_0x543d46(0x20c)](),console['log'](JSON[_0x543d46(0x1f8)](_0x48db16,null,'\x20'));if(_0x48db16['result']==='ok')_0x58a72d['removeClass']('hide'),_0x26ac34[_0x543d46(0x24f)]('hide'),_0x57deb1[_0x543d46(0x25b)](_0x48db16[_0x543d46(0x287)][_0x543d46(0x231)]('\x0a',_0x543d46(0x240))),_0x18623d(null,_0x48db16);else{const _0x2d5386=_0x26d715=>!_0x26d715?'':_0x26d715[_0x543d46(0x1e7)]('\x0a')[_0x543d46(0x285)](_0x261b81=>_0x543d46(0x1fc)+_0x261b81+_0x543d46(0x282))[_0x543d46(0x26e)]('\x0a'),_0x3f6027=_0x3f8105=>Array[_0x543d46(0x274)](_0x3f8105)?_0x3f8105[_0x543d46(0x285)](_0x2d5386)['join']('\x0a'):_0x2d5386(_0x3f8105);_0x58a72d[_0x543d46(0x24f)](_0x543d46(0x20c)),_0x26ac34[_0x543d46(0x214)](_0x543d46(0x20c)),_0x57deb1[_0x543d46(0x25b)](_0x3f6027(_0x48db16[_0x543d46(0x287)])+_0x3f6027(_0x48db16[_0x543d46(0x1d3)])),_0x18623d(new Error(_0x48db16[_0x543d46(0x266)]),_0x48db16);}})['catch'](_0x254b7d=>{const _0xd5f4dd=_0x32060d;_0x306810=![],_0x43fda1['addClass'](_0xd5f4dd(0x20c)),_0x58a72d[_0xd5f4dd(0x24f)](_0xd5f4dd(0x20c)),_0x26ac34[_0xd5f4dd(0x214)]('hide'),_0x57deb1[_0xd5f4dd(0x25b)](_0xd5f4dd(0x229)+_0x254b7d[_0xd5f4dd(0x287)]),console[_0xd5f4dd(0x281)](_0xd5f4dd(0x224),_0x254b7d),_0x18623d(_0x254b7d,null);});});}const _0x1444b2=()=>{const _0x3ba55d=_0x934216,_0xde8592=$(_0x3ba55d(0x1c4)),_0x270e21=_0xde8592[_0x3ba55d(0x20d)](),_0x6093ff=RED['nodes'][_0x3ba55d(0x217)](_0x270e21);if(!_0x6093ff)return undefined;const {endpoint:_0x4aaf7f,securityMode:_0x33a628,securityPolicy:_0x3dc133,userIdentityType:_0x23724f,userName:_0xa6bf61,password:_0x54d27e,userCertificate:_0x229d98,userPrivatekey:_0x16dd31}=_0x6093ff;return{'endpoint':_0x4aaf7f,'securityMode':_0x33a628,'securityPolicy':_0x3dc133,'userIdentityType':_0x23724f,'userName':_0xa6bf61,'password':_0x54d27e,'userCertificate':_0x229d98,'userPrivatekey':_0x16dd31};},_0x42fbe7=()=>{return{'endpointNode':_0x43d431};},_0x43d431=()=>{const _0x23b894=_0x934216,_0x187d57=$(_0x23b894(0x1c4)),_0x2413a4=_0x187d57[_0x23b894(0x20d)](),_0x1fba2c=_0x1444b2();if(!_0x1fba2c)return undefined;return{'id':_0x2413a4,'endpoint':_0x1fba2c[_0x23b894(0x228)],'securityMode':_0x1fba2c[_0x23b894(0x212)],'securityPolicy':_0x1fba2c['securityPolicy'],'userIdentityType':_0x1fba2c['userIdentityType'],'userName':_0x1fba2c[_0x23b894(0x1d8)]===_0x23b894(0x21d)?_0x1fba2c[_0x23b894(0x24b)]:undefined,'password':_0x1fba2c['userIdentityType']===_0x23b894(0x21d)?_0x1fba2c[_0x23b894(0x1c6)]:undefined,'userCertificate':_0x1fba2c[_0x23b894(0x20a)],'userPrivatekey':_0x1fba2c[_0x23b894(0x254)]};};RED[_0x934216(0x1eb)][_0x934216(0x275)](_0x934216(0x270),{'category':'opcua','color':_0x934216(0x239),'align':_0x934216(0x1d4),'icon':_0x934216(0x1d6),'defaults':{'inputs':{'value':0x1},'output':{'value':0x4},'name':{'value':''},'endpoint':{'value':'','required':!![],'type':_0x934216(0x1ea)},'action':{'value':_0x934216(0x1cd),'required':!![]},'methodId':{'value':'','required':!![]},'objectId':{'value':'','required':!![]}},'outputs':0x2,'label'(){const _0x41b977=_0x934216;return this[_0x41b977(0x23b)]||_0x41b977(0x294);},'labelStyle'(){const _0x329537=_0x934216;return this[_0x329537(0x23b)]?_0x329537(0x20f):'';},'oneditprepare'(){const _0x5a90bb=_0x934216,_0x24b5ba=this;_0x1173f6(),_0x24b5ba[_0x5a90bb(0x27c)]=0x1;let _0xb8a56e={};console[_0x5a90bb(0x281)]('Calling\x20nodeBrowser');const _0xe2524=$(_0x5a90bb(0x21a)),_0x2dfd07=$('#node-input-methodId'),_0x187096=$(_0x5a90bb(0x290)),_0x9acbc8=$(_0x5a90bb(0x262)),_0x364003=$(_0x5a90bb(0x252));_0xe2524['nodeBrowser'](Object[_0x5a90bb(0x242)](Object[_0x5a90bb(0x242)]({},_0x42fbe7()),{'filter'(_0x28c606){const _0x30a4aa=_0x5a90bb;return _0x28c606[_0x30a4aa(0x1fd)]===_0x30a4aa(0x25c);}})),_0x2dfd07[_0x5a90bb(0x260)](Object[_0x5a90bb(0x242)](Object[_0x5a90bb(0x242)]({},_0x42fbe7()),{'parentNode':()=>_0x40b27f(this,void 0x0,void 0x0,function*(){const _0x21cdc0=_0x5a90bb;let _0x42462e=_0xe2524['data'](_0x21cdc0(0x26b));if(!_0x42462e){const _0x1c5877=_0xe2524[_0x21cdc0(0x20d)](),_0x5041ac=_0x1444b2();if(!_0x5041ac)return null;const _0x534432={'baseUrl':'','endpoint':'','endpointNode':_0x5041ac};try{const _0x5596ef=yield _0x4e1468(_0x534432,_0x1c5877);_0x42462e=_0x5596ef[_0x21cdc0(0x26b)];}catch(_0xe21c36){console[_0x21cdc0(0x281)](_0xe21c36);}}return _0x42462e;}),'filter'(_0x57b725){const _0x5229e2=_0x5a90bb;return _0x57b725[_0x5229e2(0x1fd)]===_0x5229e2(0x1f0)||_0x57b725[_0x5229e2(0x1fd)]===_0x5229e2(0x25c);},'isSelectable'(_0x39b7ba){const _0x310e5a=_0x5a90bb;return _0x39b7ba[_0x310e5a(0x1fd)]==='Method';}})),_0xe2524['on']('change',()=>{const _0x2bc7c2=_0x5a90bb;_0x2dfd07[_0x2bc7c2(0x260)]('reset');}),console['log'](_0x5a90bb(0x221));function _0x4ae721(_0x52a008,_0x5ae37b,_0x29f2fe){const _0x240410=_0x5a90bb,_0x1fbd0f=$(_0x240410(0x247))[_0x240410(0x22d)](_0x52a008);$('<input\x20type=\x22text\x22>')[_0x240410(0x20d)](_0x29f2fe[_0x240410(0x23b)]||'')[_0x240410(0x1ff)]({'width':'100%'})[_0x240410(0x22d)](_0x1fbd0f);const _0x11a97b=_0xb8a56e[_0x29f2fe['dataType'][_0x240410(0x1fa)]()],_0x31a929=(_0x11a97b?_0x11a97b['browseName'][_0x240410(0x23b)]||'':_0x29f2fe[_0x240410(0x276)][_0x240410(0x1fa)]())+(_0x29f2fe[_0x240410(0x28b)]===0x1?'[]':'');$(_0x240410(0x280))[_0x240410(0x20d)](_0x29f2fe['description']['text']||'')[_0x240410(0x1ff)]({'width':'50%'})[_0x240410(0x22d)](_0x1fbd0f),$('<input\x20type=\x22text\x22>')[_0x240410(0x20d)](_0x31a929||'')[_0x240410(0x1ff)]({'width':_0x240410(0x268)})['appendTo'](_0x1fbd0f);}_0x187096[_0x5a90bb(0x296)]({'addButton':![],'height':'auto','scrollOnAdd':![],'addItem'(_0x5b76b7,_0x33de92,_0x5a5c4f){_0x4ae721(_0x5b76b7,_0x33de92,_0x5a5c4f);}}),_0x9acbc8[_0x5a90bb(0x296)]({'addButton':![],'height':_0x5a90bb(0x20e),'scrollOnAdd':![],'addItem'(_0x5235fc,_0x2f3249,_0x1616e3){_0x4ae721(_0x5235fc,_0x2f3249,_0x1616e3);}});function _0x49a452(_0x5aee67,_0x4da957){const _0x2e435d=_0x5a90bb;console[_0x2e435d(0x281)]('installArgumentList',_0x4da957['length'],_0x2e435d(0x207),_0x4da957),_0x5aee67[_0x2e435d(0x296)](_0x2e435d(0x248));for(let _0x447aef=0x0;_0x447aef<_0x4da957['length'];_0x447aef++){_0x5aee67[_0x2e435d(0x296)]('addItem',_0x4da957[_0x447aef]);}}_0x187096[_0x5a90bb(0x20c)](),_0x9acbc8['hide'](),_0x142104(_0x5a90bb(0x230),_0x364003,()=>({'url':_0x5a90bb(0x279),'body':{'endpointNode':_0x43d431(),'objectId':_0xe2524['val'](),'methodId':_0x2dfd07[_0x5a90bb(0x20d)]()}}),(_0x27f3ca,_0x16091a)=>{const _0x45aaf8=_0x5a90bb;if(_0x27f3ca)return;const _0x4f2c7e=_0x16091a[_0x45aaf8(0x206)];_0xb8a56e=_0x16091a[_0x45aaf8(0x1f5)],_0x187096[_0x45aaf8(0x213)](),_0x9acbc8['show'](),_0x49a452(_0x187096,_0x4f2c7e['inputArguments']),_0x49a452(_0x9acbc8,_0x4f2c7e[_0x45aaf8(0x289)]),console[_0x45aaf8(0x281)](_0x45aaf8(0x1f3),_0x16091a);});},'oneditsave'(){}});}()));
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvdXJjZU1hcCJdLCJuYW1lcyI6WyJfMHg0MGIyN2YiLCJfMHg1YThkNjAiLCJfMHg0NDM0MjciLCJfMHgzMGFlNDUiLCJfMHg1MzQ1YjQiLCJfMHg1MmExZDgiLCJfMHg1MzY2YzIiLCJfMHgzNTFmZmQiLCJQcm9taXNlIiwiXzB4MTgzZDFkIiwiXzB4MjYwODA3IiwiXzB4NWVlYzJhIiwiXzB4NTc5Y2Y0IiwiXzB4MWUzNGQ5IiwiXzB4NWM2YmRiIiwiXzB4MTYyOWQyIiwiXzB4NDNkODcxIiwiXzB4MWUwNWIwIiwiXzB4NGEyNzRjIiwiU3VwcHJlc3NlZEVycm9yIiwiXzB4MTA1MDJkIiwiXzB4MTYyMjlmIiwiXzB4NDMwNjcxIiwiXzB4Y2VkOGEyIiwiRXJyb3IiLCJfMHg0NTQxYjQiLCJfMHg1NTdhNmUiLCJfMHg1N2YwMzkiLCJfMHg0NzFjNjQiLCJfMHgxZDA4YmIiLCJfMHg0NDE3OWMiLCJfMHgxZmNmYWMiLCJfMHg1NTg1NmUiLCJfMHg1N2NmNTMiLCJfMHhjMDc1NSIsIl8weDQ1NDJkMSIsIl8weDNmZTk1MCIsIl8weDQzZjg2ZCIsImVuZHBvaW50Tm9kZSIsIl8weDNkY2M3NSIsImVuZHBvaW50IiwiXzB4NDc5Zjg1IiwiYmFzZVVybCIsIl8weDU0NzY1YiIsIl8weDU5ZDgzNCIsIl8weDU2NGYwZCIsIl8weDM1MGE0YyIsIl8weDViYzJhMCIsIl8weDEwNmQ3ZCIsIk9iamVjdCIsIl8weDU2N2I2MCIsImZldGNoIiwiSlNPTiIsImNvbnNvbGUiLCJfMHhhMDFkYjAiLCJfMHg1NWE5NTUiLCJfMHgzOTlmYmQiLCJfMHgyNWQ5YTkiLCJfMHgyMGExOWEiLCJfMHgyOTA4ODIiLCJfMHg1Mzg2ZDIiLCJfMHg0NmZhOGYiLCJfMHg1YjQ0ZWEiLCJfMHgzNzkyYjIiLCJfMHg3MWEwNTgiLCJfMHg1NWQ3ZDAiLCJfMHgxZmNhYTAiLCJfMHgzMGZmYjEiLCJfMHg4ZDEzYjEiLCJfMHg1MzFkIiwic2V0VGltZW91dCIsIl8weDUxZDQ3ZiIsIl8weDRkZDRmNCIsIl8weDVkY2E0NCIsIl8weDVjZGIzYiIsIl8weDI5MjE1NiIsIl8weDNkOThjMSIsIl8weGI4ZDllYSIsIl8weDQ0NjNmZCIsIl8weDI5Y2U3YSIsIl8weDUwZjBkOCIsIl8weGUwMGI5MSIsIl8weDQ4Y2VmZCIsIiQiLCJfMHhhYjcyOGQiLCJfMHg2OTMwMzEiLCJpY29uIiwiXzB4NWVkNGEzIiwiY29sb3IiLCJfMHg1NmRlMzQiLCJfMHg0YjZkNzciLCJfMHgxMTczZjYiLCJ1bmRlZmluZWQiLCJfMHgzY2NkMzAiLCJfMHgzNDQzZjUiLCJfMHgyODgzNjIiLCJfMHg1ZTJhMDUiLCJfMHgzNGZmZjEiLCJfMHhjNWFlNDgiLCJfMHgzMmExYjkiLCJfMHgzODA0MzEiLCJfMHgyOTFjN2YiLCJfMHg0NGE1OGUiLCJfMHgxMDc3MTkiLCJfMHhkNTVhMiIsInJlZmVyZW5jZXMiLCJfMHgzYzM2YTYiLCJfMHgyMDNlZTQiLCJfMHg1YjZkMDUiLCJfMHg0ZGIyMTQiLCJfMHgxYmYyNTYiLCJfMHgyYmQxNjEiLCJfMHgyYjhkMTciLCJfMHgyZmU3MzkiLCJfMHgyYWQ0NTkiLCJfMHgxYjhhZjUiLCJfMHgyNzhhZDciLCJfMHgyOTNkMTAiLCJfMHg0YzdjNWMiLCJfMHg0OTExMzciLCJfMHgzOThiZDkiLCJfMHgxNTdmOGUiLCJfMHg0NmIwOWIiLCJfMHgxODZkMDUiLCJfMHg0ODQ0YTQiLCJfMHg4NDk0M2YiLCJkb2N1bWVudCIsIl8weGQ2NmY3OSIsIl8weDRlMTQ2OCIsIl8weDIyNDA5NSIsIl8weDNjYjllZSIsIl8weDIzN2VlYSIsIl8weDMzYzUwYyIsIl8weDRhNmFmMSIsIl8weDExZTMxMyIsIl8weDIxMDUxNSIsIl8weDViODU5ZCIsIl8weGQ1MTZjZSIsIl8weDE0MjEwNCIsIl8weDNjZGVjYSIsIl8weDQxZTA1YiIsIl8weDQ2MTdjZSIsIl8weDE4NjIzZCIsIl8weDU4YTcyZCIsIl8weDI2YWMzNCIsIl8weDQzZmRhMSIsIl8weDU3ZGViMSIsIl8weDMwNjgxMCIsImJvZHkiLCJfMHg1YTE4ZWUiLCJ1cmwiLCJfMHgyNWZkYTMiLCJfMHg0ZjlkZDkiLCJfMHg0OGRiMTYiLCJfMHgyZDUzODYiLCJfMHgyNmQ3MTUiLCJfMHgyNjFiODEiLCJfMHgzZjYwMjciLCJfMHgzZjgxMDUiLCJBcnJheSIsIl8weDI1NGI3ZCIsIl8weDE0NDRiMiIsIl8weGRlODU5MiIsIl8weDI3MGUyMSIsIl8weDYwOTNmZiIsIlJFRCIsIl8weDRhYWY3ZiIsInNlY3VyaXR5TW9kZSIsIl8weDMzYTYyOCIsInNlY3VyaXR5UG9saWN5IiwiXzB4M2RjMTMzIiwidXNlcklkZW50aXR5VHlwZSIsIl8weDIzNzI0ZiIsInVzZXJOYW1lIiwiXzB4YTZiZjYxIiwicGFzc3dvcmQiLCJfMHg1NGQyN2UiLCJ1c2VyQ2VydGlmaWNhdGUiLCJfMHgyMjlkOTgiLCJ1c2VyUHJpdmF0ZWtleSIsIl8weDE2ZGQzMSIsIl8weDQyZmJlNyIsIl8weDQzZDQzMSIsIl8weDE4N2Q1NyIsIl8weDI0MTNhNCIsIl8weDFmYmEyYyIsIl8weDI0YjViYSIsIl8weGI4YTU2ZSIsIl8weGUyNTI0IiwiXzB4MmRmZDA3IiwiXzB4MTg3MDk2IiwiXzB4OWFjYmM4IiwiXzB4MzY0MDAzIiwiXzB4MjhjNjA2IiwiXzB4NDI0NjJlIiwiXzB4MWM1ODc3IiwiXzB4NTA0MWFjIiwiXzB4NTM0NDMyIiwiXzB4NTU5NmVmIiwiXzB4ZTIxYzM2IiwiXzB4NTdiNzI1IiwiXzB4MzliN2JhIiwiXzB4NGFlNzIxIiwiXzB4NTJhMDA4IiwiXzB4NWFlMzdiIiwiXzB4MjlmMmZlIiwiXzB4MWZiZDBmIiwiXzB4MTFhOTdiIiwiXzB4MzFhOTI5IiwiXzB4NWI3NmI3IiwiXzB4MzNkZTkyIiwiXzB4NWE1YzRmIiwiXzB4NTIzNWZjIiwiXzB4MmYzMjQ5IiwiXzB4MTYxNmUzIiwiXzB4NDlhNDUyIiwiXzB4NWFlZTY3IiwiXzB4NGRhOTU3IiwiXzB4NDQ3YWVmIiwiXzB4MjdmM2NhIiwiXzB4MTYwOTFhIiwiXzB4NGYyYzdlIl0sIm1hcHBpbmdzIjoiazFIQUFBLENB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IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG4gICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG4gICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG4gICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG4gICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG4gICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbiAgICAvKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxuICAgIH07XG5cbiAgICB2YXIgQnJvd3NlRGlyZWN0aW9uO1xuICAgIChmdW5jdGlvbiAoQnJvd3NlRGlyZWN0aW9uKSB7XG4gICAgICAgIEJyb3dzZURpcmVjdGlvbltCcm93c2VEaXJlY3Rpb25bXCJGb3J3YXJkXCJdID0gMF0gPSBcIkZvcndhcmRcIjtcbiAgICAgICAgQnJvd3NlRGlyZWN0aW9uW0Jyb3dzZURpcmVjdGlvbltcIkludmVyc2VcIl0gPSAxXSA9IFwiSW52ZXJzZVwiO1xuICAgICAgICBCcm93c2VEaXJlY3Rpb25bQnJvd3NlRGlyZWN0aW9uW1wiQm90aFwiXSA9IDJdID0gXCJCb3RoXCI7XG4gICAgICAgIEJyb3dzZURpcmVjdGlvbltCcm93c2VEaXJlY3Rpb25bXCJJbnZhbGlkXCJdID0gM10gPSBcIkludmFsaWRcIjtcbiAgICB9KShCcm93c2VEaXJlY3Rpb24gfHwgKEJyb3dzZURpcmVjdGlvbiA9IHt9KSk7XG4gICAgdmFyIE5vZGVDbGFzcztcbiAgICAoZnVuY3Rpb24gKE5vZGVDbGFzcykge1xuICAgICAgICBOb2RlQ2xhc3NbTm9kZUNsYXNzW1wiVW5zcGVjaWZpZWRcIl0gPSAwXSA9IFwiVW5zcGVjaWZpZWRcIjtcbiAgICAgICAgTm9kZUNsYXNzW05vZGVDbGFzc1tcIk9iamVjdFwiXSA9IDFdID0gXCJPYmplY3RcIjtcbiAgICAgICAgTm9kZUNsYXNzW05vZGVDbGFzc1tcIlZhcmlhYmxlXCJdID0gMl0gPSBcIlZhcmlhYmxlXCI7XG4gICAgICAgIE5vZGVDbGFzc1tOb2RlQ2xhc3NbXCJNZXRob2RcIl0gPSA0XSA9IFwiTWV0aG9kXCI7XG4gICAgICAgIE5vZGVDbGFzc1tOb2RlQ2xhc3NbXCJPYmplY3RUeXBlXCJdID0gOF0gPSBcIk9iamVjdFR5cGVcIjtcbiAgICAgICAgTm9kZUNsYXNzW05vZGVDbGFzc1tcIlZhcmlhYmxlVHlwZVwiXSA9IDE2XSA9IFwiVmFyaWFibGVUeXBlXCI7XG4gICAgICAgIE5vZGVDbGFzc1tOb2RlQ2xhc3NbXCJSZWZlcmVuY2VUeXBlXCJdID0gMzJdID0gXCJSZWZlcmVuY2VUeXBlXCI7XG4gICAgICAgIE5vZGVDbGFzc1tOb2RlQ2xhc3NbXCJEYXRhVHlwZVwiXSA9IDY0XSA9IFwiRGF0YVR5cGVcIjtcbiAgICAgICAgTm9kZUNsYXNzW05vZGVDbGFzc1tcIlZpZXdcIl0gPSAxMjhdID0gXCJWaWV3XCI7XG4gICAgfSkoTm9kZUNsYXNzIHx8IChOb2RlQ2xhc3MgPSB7fSkpO1xuICAgIC8vICBjb25zdCBxID0gUmVmZXJlbmNlVHlwZUlkcy5Pcmdhbml6ZXM7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU5vZGVJZChub2RlSWRMaWtlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZUlkTGlrZSkge1xuICAgICAgICAgICAgY2FzZSBcIk9yZ2FuaXplc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcImk9MzVcIjtcbiAgICAgICAgICAgIGNhc2UgXCJIYXNDb21wb25lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpPTQ3XCI7XG4gICAgICAgICAgICBjYXNlIFwiSGFzQ2hpbGRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpPTM0XCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBPcmdhbml6ZXNSZWZOb2RlSWQgPSBcIm5zPTA7aT0zNVwiO1xuICAgIGNvbnN0IEZvbGRlclR5cGUgPSBcIm5zPTA7aT02MVwiO1xuICAgIGNvbnN0IEhhc0NvbXBvbmVudFJlZk5vZGVJZCA9IFwibnM9MDtpPTQ3XCI7XG4gICAgY29uc3QgSGFzUHJvcGVydHlSZWZOb2RlSWQgPSBcIm5zPTA7aT00NlwiO1xuXG4gICAgY29uc3QgZ2V0SWNvbiA9IChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZWZlcmVuY2Uubm9kZUNsYXNzKSB7XG4gICAgICAgICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5yZWZlcmVuY2VUeXBlSWQgPT09IE9yZ2FuaXplc1JlZk5vZGVJZCkgO1xuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2UudHlwZURlZmluaXRpb24gPT09IEZvbGRlclR5cGUgfHwgcmVmZXJlbmNlLnJlZmVyZW5jZVR5cGVJZCA9PT0gXCJpPTYxXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogXCJmYS1mb2xkZXJcIiwgY29sb3I6IFwicmdiYSg2MSwgNjAsIDQsIDAuNTI1KVwiIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGljb246IFwiZmEtb2JqZWN0LWdyb3VwXCIsIGNvbG9yOiBcIlNlYUdyZWVuXCIgfTtcbiAgICAgICAgICAgIGNhc2UgXCJWYXJpYWJsZVwiOlxuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2UucmVmZXJlbmNlVHlwZUlkID09PSBIYXNDb21wb25lbnRSZWZOb2RlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogXCJmYS1saXN0LWFsdFwiLCBjb2xvcjogXCJTdGVlbEJsdWVcIiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcmVuY2UucmVmZXJlbmNlVHlwZUlkID09PSBIYXNQcm9wZXJ0eVJlZk5vZGVJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpY29uOiBcImZhLWxpc3QtYWx0XCIsIGNvbG9yOiBcIkRvZGdlckJsdWVcIiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogXCJmYS1saXN0LWFsdFwiLCBjb2xvcjogXCJDYWRldEJsdWVcIiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJNZXRob2RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpY29uOiBcImZhLWNvZ1wiLCBjb2xvcjogXCJTYW5keUJyb3duXCIgfTtcbiAgICAgICAgICAgIGNhc2UgXCJPYmplY3RUeXBlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogXCJmYS1vYmplY3QtZ3JvdXBcIiwgY29sb3I6IFwiRGFya09yYW5nZVwiIH07XG4gICAgICAgICAgICBjYXNlIFwiVmFyaWFibGVUeXBlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogXCJmYS1zbGlkZXJzXCIsIGNvbG9yOiBcIkRhcmtPcmFuZ2VcIiB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGljb246IFwiZmEtcXVlc3Rpb25cIiwgY29sb3I6IFwiZ3JleVwiIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGJyb3dzZSA9ICh7IGVuZHBvaW50Tm9kZSwgZW5kcG9pbnQsIGJhc2VVcmwgfSwgbm9kZUlkLCB0ZW1wbGF0ZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBgJHtiYXNlVXJsfS9vcGN1YS1lbmRwb2ludDJgO1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtyb290fS9icm93c2VgO1xuICAgICAgICBjb25zdCBicm93c2VEZXNjcmlwdGlvbiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGVtcGxhdGUpLCB7IG5vZGVJZCwgcmVzdWx0TWFzazogNjMgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnROb2RlLFxuICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgIGJyb3dzZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJmZWNodGluZyBmYWlsZWQgd2l0aCBlcnJvclwiLCBkYXRhLnN0YXR1cywgZGF0YS5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgIHJldHVybiB7IHJlZmVyZW5jZXM6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJmZXRjaGVkIDogXCIsIGRhdGEuc3RhdHVzLCBkYXRhLnN0YXR1c1RleHQpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGRhdGEuanNvbigpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gcmVzcG9uc2UuYnJvd3NlUmVzdWx0LnJlZmVyZW5jZXMgfHwgW107XG4gICAgICAgIHJldHVybiB7IHJlZmVyZW5jZXMgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlMSA9IHtcbiAgICAgICAgcmVmZXJlbmNlVHlwZUlkOiByZXNvbHZlTm9kZUlkKFwiSGFzQ2hpbGRcIiksXG4gICAgICAgIGluY2x1ZGVTdWJ0eXBlczogdHJ1ZSxcbiAgICAgICAgYnJvd3NlRGlyZWN0aW9uOiBCcm93c2VEaXJlY3Rpb24uRm9yd2FyZCxcbiAgICAgICAgbm9kZUNsYXNzTWFzazogTm9kZUNsYXNzLlZhcmlhYmxlIHwgTm9kZUNsYXNzLk9iamVjdCB8IE5vZGVDbGFzcy5NZXRob2QsXG4gICAgICAgIC8vICBOb2RlQ2xhc3MuT2JqZWN0VHlwZSB8XG4gICAgICAgIC8vICBOb2RlQ2xhc3MuVmFyaWFibGVUeXBlIHxcbiAgICAgICAgLy8gTm9kZUNsYXNzLlJlZmVyZW5jZVR5cGUgfFxuICAgICAgICAvLyBOb2RlQ2xhc3MuRGF0YVR5cGUgfFxuICAgICAgICAvLyBOb2RlQ2xhc3MuVmlldyxcbiAgICAgICAgcmVzdWx0TWFzazogNjMsXG4gICAgfTtcbiAgICBjb25zdCB0ZW1wbGF0ZTIgPSB7XG4gICAgICAgIHJlZmVyZW5jZVR5cGVJZDogcmVzb2x2ZU5vZGVJZChcIk9yZ2FuaXplc1wiKSxcbiAgICAgICAgaW5jbHVkZVN1YnR5cGVzOiB0cnVlLFxuICAgICAgICBicm93c2VEaXJlY3Rpb246IEJyb3dzZURpcmVjdGlvbi5Gb3J3YXJkLFxuICAgICAgICBub2RlQ2xhc3NNYXNrOiBOb2RlQ2xhc3MuVmFyaWFibGUgfCBOb2RlQ2xhc3MuT2JqZWN0IHwgTm9kZUNsYXNzLk1ldGhvZCxcbiAgICAgICAgLy8gIE5vZGVDbGFzcy5PYmplY3RUeXBlIHxcbiAgICAgICAgLy8gIE5vZGVDbGFzcy5WYXJpYWJsZVR5cGUgfFxuICAgICAgICAvLyBOb2RlQ2xhc3MuUmVmZXJlbmNlVHlwZSB8XG4gICAgICAgIC8vIE5vZGVDbGFzcy5EYXRhVHlwZSB8XG4gICAgICAgIC8vIE5vZGVDbGFzcy5WaWV3LFxuICAgICAgICByZXN1bHRNYXNrOiA2MyxcbiAgICB9O1xuICAgIGNvbnN0IGludGVybmFsVmVyaWZ5ID0gKHsgZW5kcG9pbnROb2RlLCBlbmRwb2ludCwgYmFzZVVybCB9LCAkaW5wdXRFbGVtZW50LCAkaW5mbykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBgJHtiYXNlVXJsfS9vcGN1YS1lbmRwb2ludDJgO1xuICAgICAgICBjb25zdCBub2RlSWQgPSAkaW5wdXRFbGVtZW50LnZhbCgpO1xuICAgICAgICBjb25zdCBkYXRhID0geWllbGQgZmV0Y2goYCR7cm9vdH0vY2hlY2tOb2RlSWRgLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Tm9kZSxcbiAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNldE5vdGlmID0gKHRleHQsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgJGluZm8udGV4dCh0ZXh0KS5hZGRDbGFzcyhcInN0ZXJmaXZlLWluZm9cIikuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICRpbmZvLnNob3coKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICRpbmZvLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgJGluZm8uaGlkZSgpO1xuICAgICAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGpzb24gPSAoeWllbGQgZGF0YS5qc29uKCkpO1xuICAgICAgICBpZiAoZGF0YS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nO1xuICAgICAgICAgICAgc2V0Tm90aWYoXCIhIWZhaWx1cmUhIVwiICsgbm9kZUlkLCBcImZhaWx1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoanNvbi5zdGF0dXNDb2RlLm1hdGNoKC9Hb29kLykpIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAkaW5wdXRFbGVtZW50LnZhbChqc29uLm5vZGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAkaW5wdXRFbGVtZW50LnRyaWdnZXIoXCJjaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgc2V0Tm90aWYoXCJHb29kXCIsIFwib2tcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAkaW5wdXRFbGVtZW50LnZhbChgJHtub2RlSWR9YCk7XG4gICAgICAgICAgICAgICAgc2V0Tm90aWYoYCR7anNvbi5zdGF0dXNDb2RlfSAke2RhdGEuc3RhdHVzVGV4dH1gLCBcImZhaWx1cmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBmZXRjaENoaWxkcmVuKCRub2RlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSAkbm9kZS5kYXRhKFwidmFsdWVcIik7XG4gICAgICAgICAgICBjb25zdCBicm93c2VSZXN1bHQxID0geWllbGQgYnJvd3NlKGRhdGEsIG5vZGVJZCwgdGVtcGxhdGUxKTtcbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZVJlc3VsdDIgPSB5aWVsZCBicm93c2UoZGF0YSwgbm9kZUlkLCB0ZW1wbGF0ZTIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbLi4uYnJvd3NlUmVzdWx0MS5yZWZlcmVuY2VzLCAuLi5icm93c2VSZXN1bHQyLnJlZmVyZW5jZXNdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1ha2VFbGVtZW50ID0gKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoIXJlZmVyZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgJGVsZW1lbnQgPSAkKGA8bGk+PGkgY2xhc3M9XCJmYSBmYS1lcnJvclwiIHN0eWxlPVwiY29sb3I6cmVkO1wiPjwvaT5ubyByZWZlcmVuY2UgITx1bD48L3VsPjwvbGk+YCk7XG4gICAgICAgICAgICByZXR1cm4gJGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9IHJlZmVyZW5jZS5ub2RlSWQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgdCA9ICgoX2EgPSByZWZlcmVuY2UuZGlzcGxheU5hbWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSB8fCAoKF9iID0gcmVmZXJlbmNlLmJyb3dzZU5hbWUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSB8fCByZWZlcmVuY2Uubm9kZUlkLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHsgaWNvbiwgY29sb3IgfSA9IGdldEljb24ocmVmZXJlbmNlKTtcbiAgICAgICAgY29uc3QgJGVsZW1lbnQgPSAkKGA8bGk+PGkgY2xhc3M9XCJmYSAke2ljb259XCIgc3R5bGU9XCJjb2xvcjoke2NvbG9yfTtcIj48L2k+ICR7dH08dWw+PC91bD48L2xpPmApO1xuICAgICAgICAkZWxlbWVudC5hZGRDbGFzcyhcImV4cGFuZGFibGVcIik7XG4gICAgICAgICRlbGVtZW50LmRhdGEoXCJ2YWx1ZVwiLCBuKTtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShcInJlZmVyZW5jZVwiLCByZWZlcmVuY2UpO1xuICAgICAgICByZXR1cm4gJGVsZW1lbnQ7XG4gICAgfTtcbiAgICBjb25zdCBkZWNsYXJlTm9kZUJyb3dzZXJXaWRnZXQgPSAoKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBbIFRlbXBlcmF0dXJlICBdXG4gICAgICAgICAqICAgKCB0b29sdGlwIDogKC9PYmplY3RzL015U2Vuc29yKSAobnM9MTtzPVRlbXBlcmF0dXJlKSlcbiAgICAgICAgICogWyArIFtGb2xkZXJdIE9iamVjdHNdXG4gICAgICAgICAqIFsgICAgIFtPYmplY3RdIE15U2Vuc29yXVxuICAgICAgICAgKiBbICAgICAoICkgW1ZhcmlhYmxlXSBUZW1wZXJhdHVyZV1cbiAgICAgICAgICovXG4gICAgICAgICQud2lkZ2V0KFwic3RlcmZpdmUubm9kZUJyb3dzZXJcIiwge1xuICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgZW5kcG9pbnROb2RlOiAoKSA9PiAoeyBlbmRwb2ludDogXCJvcGMudGNwOi8vb3BjdWFkZW1vLnN0ZXJmaXZlLmNvbToyNjU0M1wiIH0pLFxuICAgICAgICAgICAgICAgIGVuZHBvaW50OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgYnJvd3NlTmFtZTogeyBuYW1lc3BhY2VJbmRleDogMCwgbmFtZTogXCJPYmplY3RzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZUNsYXNzOiBcIk9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBub2RlSWQ6IFwibnM9MDtpPTg1XCIsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB7IHRleHQ6IFwiT2JqZWN0c1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGVEZWZpbml0aW9uOiBGb2xkZXJUeXBlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICBiYXNlVXJsOiBcIlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc29sdmVQYXJlbnROb2RlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gdHlwZW9mIHRoYXQub3B0aW9ucy5wYXJlbnROb2RlID09PSBcImZ1bmN0aW9uXCIgPyB0aGF0Lm9wdGlvbnMucGFyZW50Tm9kZSgpIDogdGhhdC5vcHRpb25zLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhhdC4kdHJlZS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVBhcmVudE5vZGUoKS50aGVuKChwYXJlbnROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRlbGVtZW50ID0gbWFrZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuJHRyZWUuYXBwZW5kKCRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5jdXJyZW50UGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJpZnkoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgLy8gRmV0Y2ggbmV3IGRhdGEgZm9yIHRoaXMgbm9kZVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IHRoYXQub3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5vZGU6IHR5cGVvZiB0aGF0Lm9wdGlvbnMuZW5kcG9pbnROb2RlID09PSBcImZ1bmN0aW9uXCIgPyB0aGF0Lm9wdGlvbnMuZW5kcG9pbnROb2RlKCkgOiB0aGF0Lm9wdGlvbnMuZW5kcG9pbnROb2RlLFxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDogdHlwZW9mIHRoYXQub3B0aW9ucy5lbmRwb2ludCA9PT0gXCJmdW5jdGlvblwiID8gdGhhdC5vcHRpb25zLmVuZHBvaW50KCkgOiB0aGF0Lm9wdGlvbnMuZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFZlcmlmeShkYXRhLCB0aGF0LiRpbnB1dCwgdGhhdC4kaW5mbyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2NyZWF0ZSgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZmV0Y2hEYXRhRm9yTm9kZSgkbm9kZSwgZmV0Y2hGdW5jLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5vZGUuaGFzQ2xhc3MoXCJmZXRjaGVkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJhbHJlYWR5IGZldGNoZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRub2RlLmhhc0NsYXNzKFwibG9hZGluZ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWxyZWFkeSBsb2FkaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRub2RlLmFkZENsYXNzKFwibG9hZGluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRub2RlLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGUuY2hpbGRyZW4oXCJ1bFwiKS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVmZXJlbmNlcyB9ID0geWllbGQgZmV0Y2hGdW5jKCRub2RlLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiByZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuZmlsdGVyICYmICF0aGF0Lm9wdGlvbnMuZmlsdGVyKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRlbGVtZW50ID0gbWFrZUVsZW1lbnQocmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGUuY2hpbGRyZW4oXCJ1bFwiKS5hcHBlbmQoJGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbm9kZS5hZGRDbGFzcyhcImZldGNoZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGUuY2hpbGRyZW4oXCJ1bFwiKS5hcHBlbmQoYDxsaT5lcnJvciAke2Vyci5tZXNzYWdlfTwvbGk+YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRub2RlLmZpbmQoXCIuc3Bpbm5lclwiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRub2RlLnJlbW92ZUNsYXNzKFwibG9hZGluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoYXQuJGlucHV0ID0gdGhpcy5lbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoYXQuJGNvbWJvID0gJChcIjxkaXYvPlwiKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRjb21iby5hZGRDbGFzcyhcInN0ZXJmdmUtY29tYm8tYm94XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZXBsYWNlV2l0aCh0aGF0LiRjb21ibyk7XG4gICAgICAgICAgICAgICAgdGhhdC4kaW5wdXRHcm91cCA9ICQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3MoXCJpbnB1dC1ncm91cFwiKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRjb21iby5hcHBlbmQodGhhdC4kaW5wdXRHcm91cCk7XG4gICAgICAgICAgICAgICAgdGhhdC4kaW5wdXRHcm91cC5hcHBlbmQodGhhdC4kaW5wdXQpO1xuICAgICAgICAgICAgICAgIHRoYXQuJHRvZ2dsZVRyZWVCdG4gPSAkKGA8YnV0dG9uPjxpIGNsYXNzPVwiZmEgZmEtc2l0ZW1hcFwiPjwvaT48L2J1dHRvbj5gKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRpbnB1dEdyb3VwLmFwcGVuZCh0aGF0LiR0b2dnbGVUcmVlQnRuKTtcbiAgICAgICAgICAgICAgICB0aGF0LiR0b2dnbGVUcmVlQnRuLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoYXQuJGRyb3Bkb3duLmlzKFwiOnZpc2libGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyZWUgd2lkZ2V0IGlzIGdvaW5nIHRvIGJlY29tZSB2aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlc29sdmVQYXJlbnROb2RlKCkudGhlbigocGFyZW50Tm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPT0gdGhhdC5jdXJyZW50UGFyZW50IHx8ICgoX2EgPSB0aGF0LmN1cnJlbnRQYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ub2RlSWQpICE9PSBwYXJlbnROb2RlLm5vZGVJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRpbmZvLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGF0LiRkcm9wZG93bi50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGF0LiR2ZXJpZnlCdG4gPSAkKGA8YnV0dG9uPjxpIGNsYXNzPVwiZmEgZmEtZmxhc2tcIj48L2k+PC9idXR0b24+YCk7XG4gICAgICAgICAgICAgICAgdGhhdC4kaW5wdXRHcm91cC5hcHBlbmQodGhhdC4kdmVyaWZ5QnRuKTtcbiAgICAgICAgICAgICAgICB0aGF0LiR2ZXJpZnlCdG4ub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmVyaWZ5KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGF0LiRpbnB1dC5hdHRyKFwicGxhY2Vob2xkZXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC4kaW5wdXQuYXR0cihcInBsYWNlaG9sZGVyXCIsIFwiZW50ZXIgYSBub2RlSWQgb3IgYSBicm93c2VQYXRoIFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhhdC4kaW5mbyA9ICQoYDxkaXYgY2xhc3M9XCJpbmZvLXRleHRcIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRpbmZvLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAvLyBGZXRjaCBuZXcgZGF0YSBmb3IgdGhpcyBub2RlXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybDogdGhhdC5vcHRpb25zLmJhc2VVcmwsXG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50Tm9kZTogdHlwZW9mIHRoYXQub3B0aW9ucy5lbmRwb2ludE5vZGUgPT09IFwiZnVuY3Rpb25cIiA/IHRoYXQub3B0aW9ucy5lbmRwb2ludE5vZGUoKSA6IHRoYXQub3B0aW9ucy5lbmRwb2ludE5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50OiB0eXBlb2YgdGhhdC5vcHRpb25zLmVuZHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyB0aGF0Lm9wdGlvbnMuZW5kcG9pbnQoKSA6IHRoYXQub3B0aW9ucy5lbmRwb2ludCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGF0LiRkcm9wZG93biA9ICQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3MoXCJzdGVyZnZlLWRyb3Bkb3duXCIpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRjb21iby5hcHBlbmQodGhhdC4kaW5mbyk7XG4gICAgICAgICAgICAgICAgdGhhdC4kY29tYm8uYXBwZW5kKHRoYXQuJGRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICB0aGF0LiR0cmVlID0gJChgPHVsIGNsYXNzPVwic3RlcmZpdmUtdHJlZVwiPjwvdWw+YCkuYXBwZW5kVG8odGhhdC4kZHJvcGRvd24pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGF0LiR0cmVlLm9uKFwiY2xpY2tcIiwgXCJsaVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCAkbGkgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVXaWR0aCA9IDIwOyAvLyBTZXQgd2lkdGggb2YgdGhlIDo6YmVmb3JlIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSGVpZ2h0ID0gMjA7IC8vIFNldCBoZWlnaHQgb2YgdGhlIDo6YmVmb3JlIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFBvcyA9ICQodGhpcykub2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUucGFnZVggPj0gZWxlbWVudFBvcy5sZWZ0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhZ2VYIDw9IGVsZW1lbnRQb3MubGVmdCArIGJlZm9yZVdpZHRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhZ2VZID49IGVsZW1lbnRQb3MudG9wICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhZ2VZIDw9IGVsZW1lbnRQb3MudG9wICsgYmVmb3JlSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGxpLmhhc0NsYXNzKFwiZXhwYW5kYWJsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbGkuaGFzQ2xhc3MoXCJmZXRjaGVkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaS5yZW1vdmVDbGFzcyhcImV4cGFuZGFibGVcIikuYWRkQ2xhc3MoXCJleHBhbmRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpLmNoaWxkcmVuKFwidWxcIikudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggbmV3IGRhdGEgZm9yIHRoaXMgbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IHRoYXQub3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5vZGU6IHR5cGVvZiB0aGF0Lm9wdGlvbnMuZW5kcG9pbnROb2RlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhhdC5vcHRpb25zLmVuZHBvaW50Tm9kZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoYXQub3B0aW9ucy5lbmRwb2ludE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50OiB0eXBlb2YgdGhhdC5vcHRpb25zLmVuZHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyB0aGF0Lm9wdGlvbnMuZW5kcG9pbnQoKSA6IHRoYXQub3B0aW9ucy5lbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mZXRjaERhdGFGb3JOb2RlKCRsaSwgZmV0Y2hDaGlsZHJlbiwgZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiBGZXRjaGluZyBkb25lXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImZldGNoZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgZXhwYW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpLnJlbW92ZUNsYXNzKFwiZXhwYW5kYWJsZVwiKS5hZGRDbGFzcyhcImV4cGFuZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaS5yZW1vdmVDbGFzcyhcImV4cGFuZGFibGVcIikuYWRkQ2xhc3MoXCJleHBhbmRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJGxpLmhhc0NsYXNzKFwiZXhwYW5kZWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb2dnbGUgaXRzIGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaS5jaGlsZHJlbihcInVsXCIpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3YXAgZXhwYW5kYWJsZSBhbmQgZXhwYW5kZWQgY2xhc3Nlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaS50b2dnbGVDbGFzcyhcImV4cGFuZGFibGUgZXhwYW5kZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkbGkuY2hpbGRyZW4oXCJ1bFwiKS5jaGlsZHJlbigpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGkuY2hpbGRyZW4oXCJ1bFwiKS50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2FwIGV4cGFuZGFibGUgYW5kIGV4cGFuZGVkIGNsYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGkudG9nZ2xlQ2xhc3MoXCJleHBhbmRhYmxlIGV4cGFuZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICRsaS5kYXRhKFwidmFsdWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSAkbGkuZGF0YShcInJlZmVyZW5jZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuaXNTZWxlY3RhYmxlICYmICF0aGF0Lm9wdGlvbnMuaXNTZWxlY3RhYmxlKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRpbnB1dC5kYXRhKFwicmVmZXJlbmNlXCIsIHJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICgoX2EgPSByZWZlcmVuY2UuZGlzcGxheU5hbWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSB8fCAoKF9iID0gcmVmZXJlbmNlLmJyb3dzZU5hbWUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSB8fCByZWZlcmVuY2Uubm9kZUlkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGBbJHtkaXNwbGF5TmFtZX1dKCR7dmFsdWV9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRpbnB1dC52YWwoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC4kaW5wdXQudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJGRyb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG91dHNpZGUgdGhlIHBhZ2Ugd2lsbCBoaWRlIHRoZSBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICBpZiAoISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KHRoYXQuJGNvbWJvKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJGRyb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrTm9kZUlkID0gKHsgZW5kcG9pbnROb2RlLCBlbmRwb2ludCwgYmFzZVVybCB9LCBub2RlSWQpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCByb290ID0gYCR7YmFzZVVybH0vb3BjdWEtZW5kcG9pbnQyYDtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7cm9vdH0vY2hlY2tOb2RlSWRgO1xuICAgICAgICBjb25zdCBkYXRhID0geWllbGQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGVuZHBvaW50Tm9kZSxcbiAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImZlY2h0aW5nIGZhaWxlZCB3aXRoIGVycm9yXCIsIGRhdGEuc3RhdHVzLCBkYXRhLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IFwiQmFkXCIsXG4gICAgICAgICAgICAgICAgbm9kZUFkZHJlc3NTdHJpbmc6IG5vZGVJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZmV0Y2hlZCA6IFwiLCBkYXRhLnN0YXR1cywgZGF0YS5zdGF0dXNUZXh0KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB5aWVsZCBkYXRhLmpzb24oKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWFuYWdlQVBJQ2FsbChwcmVmaXgsIGJ0biwgZnVuYywgb25SZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc0ljb24gPSAkKGAjJHtwcmVmaXh9LXN1Y2Nlc3NgKTtcbiAgICAgICAgY29uc3QgZmFpbHVyZUljb24gPSAkKGAjJHtwcmVmaXh9LWZhaWx1cmVgKTtcbiAgICAgICAgY29uc3QgcGVuZGluZ0ljb24gPSAkKGAjJHtwcmVmaXh9LXBlbmRpbmdgKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSAkKGAjJHtwcmVmaXh9LW1lc3NhZ2VzYCk7XG4gICAgICAgIGxldCBhY3Rpb25QZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHN1Y2Nlc3NJY29uLmhpZGUoKTtcbiAgICAgICAgZmFpbHVyZUljb24uaGlkZSgpO1xuICAgICAgICBwZW5kaW5nSWNvbi5oaWRlKCk7XG4gICAgICAgIGJ0bi5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb25QZW5kaW5nKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGFjdGlvblBlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcGVuZGluZ0ljb24ucmVtb3ZlQ2xhc3MoXCJoaWRlXCIpO1xuICAgICAgICAgICAgcGVuZGluZ0ljb24uaHRtbChcIlRlc3RpbmcgQ29ubmVjdGlvbiAuLi5cIik7XG4gICAgICAgICAgICBzdWNjZXNzSWNvbi5hZGRDbGFzcyhcImhpZGVcIik7XG4gICAgICAgICAgICBmYWlsdXJlSWNvbi5hZGRDbGFzcyhcImhpZGVcIik7XG4gICAgICAgICAgICBtZXNzYWdlcy5odG1sKFwiXCIpO1xuICAgICAgICAgICAgY29uc3QgeyBib2R5LCB1cmwgfSA9IGZ1bmMoKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwieHh4eHhcIiwgYm9keSk7XG4gICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IGRhdGEuanNvbigpKVxuICAgICAgICAgICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdJY29uLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCBcIiBcIikpO1xuICAgICAgICAgICAgICAgIGlmIChqc29uLnJlc3VsdCA9PT0gXCJva1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NJY29uLnJlbW92ZUNsYXNzKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgZmFpbHVyZUljb24uYWRkQ2xhc3MoXCJoaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5odG1sKGpzb24ubWVzc2FnZS5yZXBsYWNlKFwiXFxuXCIsIFwiPGJyPlwiKSk7XG4gICAgICAgICAgICAgICAgICAgIG9uUmVzdWx0KG51bGwsIGpzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRhcHQgPSAoc3RyKSA9PiAhc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYDxwPiR7YX08L3A+YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRhcHQyID0gKHN0cikgPT4gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ci5tYXAoYWRhcHQpLmpvaW4oXCJcXG5cIikgOiBhZGFwdChzdHIpKTtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0ljb24uYWRkQ2xhc3MoXCJoaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlSWNvbi5yZW1vdmVDbGFzcyhcImhpZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmh0bWwoYWRhcHQyKGpzb24ubWVzc2FnZSkgKyBhZGFwdDIoanNvbi5leHRyYSkpO1xuICAgICAgICAgICAgICAgICAgICBvblJlc3VsdChuZXcgRXJyb3IoanNvbi5yZXN1bHQpLCBqc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdJY29uLmFkZENsYXNzKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICBzdWNjZXNzSWNvbi5hZGRDbGFzcyhcImhpZGVcIik7XG4gICAgICAgICAgICAgICAgZmFpbHVyZUljb24ucmVtb3ZlQ2xhc3MoXCJoaWRlXCIpO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmh0bWwoXCJpbnRlcm5hbCBlcnJvciBcIiArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVyclwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIG9uUmVzdWx0KGVyciwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0RW5kUG9pbnRBdHRyaWJ1dGVzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCAkZW5kcG9pbnQgPSAkKFwiI25vZGUtaW5wdXQtZW5kcG9pbnRcIik7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50SWQgPSAkZW5kcG9pbnQudmFsKCk7XG4gICAgICAgIGNvbnN0IHJlZE5vZGUgPSBSRUQubm9kZXMubm9kZShlbmRwb2ludElkKTtcbiAgICAgICAgaWYgKCFyZWROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzYW5pdHplIGFuZCBleHRyYWN0IHRoZSBlbmRwb2ludCBhdHRyaWJ1dGVzIG9ubHkgKCBub3QgaHRlIHJlZG5vZGUgc3R1ZmYpXG4gICAgICAgIGNvbnN0IHsgZW5kcG9pbnQsIHNlY3VyaXR5TW9kZSwgc2VjdXJpdHlQb2xpY3ksIHVzZXJJZGVudGl0eVR5cGUsIHVzZXJOYW1lLCBwYXNzd29yZCwgdXNlckNlcnRpZmljYXRlLCB1c2VyUHJpdmF0ZWtleSB9ID0gcmVkTm9kZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgc2VjdXJpdHlNb2RlLFxuICAgICAgICAgICAgc2VjdXJpdHlQb2xpY3ksXG4gICAgICAgICAgICB1c2VySWRlbnRpdHlUeXBlLFxuICAgICAgICAgICAgdXNlck5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgIHVzZXJDZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgIHVzZXJQcml2YXRla2V5LFxuICAgICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJzSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuZHBvaW50Tm9kZTogZ2V0RW5kcG9pbnRQYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCAkZW5kcG9pbnQgPSAkKFwiI25vZGUtaW5wdXQtZW5kcG9pbnRcIik7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50SWQgPSAkZW5kcG9pbnQudmFsKCk7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50TnIgPSBnZXRFbmRQb2ludEF0dHJpYnV0ZXMoKTtcbiAgICAgICAgaWYgKCFlbmRwb2ludE5yKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZW5kcG9pbnRJZCxcbiAgICAgICAgICAgIGVuZHBvaW50OiBlbmRwb2ludE5yLmVuZHBvaW50LFxuICAgICAgICAgICAgc2VjdXJpdHlNb2RlOiBlbmRwb2ludE5yLnNlY3VyaXR5TW9kZSxcbiAgICAgICAgICAgIHNlY3VyaXR5UG9saWN5OiBlbmRwb2ludE5yLnNlY3VyaXR5UG9saWN5LFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIHVzZXJJZGVudGl0eVR5cGU6IGVuZHBvaW50TnIudXNlcklkZW50aXR5VHlwZSxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICB1c2VyTmFtZTogZW5kcG9pbnROci51c2VySWRlbnRpdHlUeXBlID09PSBcIlVzZXJOYW1lXCIgPyBlbmRwb2ludE5yLnVzZXJOYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IGVuZHBvaW50TnIudXNlcklkZW50aXR5VHlwZSA9PT0gXCJVc2VyTmFtZVwiID8gZW5kcG9pbnROci5wYXNzd29yZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJDZXJ0aWZpY2F0ZTogZW5kcG9pbnROci51c2VyQ2VydGlmaWNhdGUsXG4gICAgICAgICAgICB1c2VyUHJpdmF0ZWtleTogZW5kcG9pbnROci51c2VyUHJpdmF0ZWtleSxcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgUkVELm5vZGVzLnJlZ2lzdGVyVHlwZShcIk9wY1VhLUNsaWVudDItQ2FsbFwiLCB7XG4gICAgICAgIGNhdGVnb3J5OiBcIm9wY3VhXCIsXG4gICAgICAgIGNvbG9yOiBcIiNDMERFRURcIixcbiAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgaWNvbjogXCIuLi8uLi9pY29ucy9vcGN1YW5vZGVMb2dvLnBuZ1wiLFxuICAgICAgICBkZWZhdWx0czoge1xuICAgICAgICAgICAgaW5wdXRzOiB7IHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBvdXRwdXQ6IHsgdmFsdWU6IDQgfSxcbiAgICAgICAgICAgIC8vIENvbW1vblxuICAgICAgICAgICAgbmFtZTogeyB2YWx1ZTogXCJcIiB9LFxuICAgICAgICAgICAgZW5kcG9pbnQ6IHsgdmFsdWU6IFwiXCIsIHJlcXVpcmVkOiB0cnVlLCB0eXBlOiBcIk9wY1VhLUVuZHBvaW50MlwiIH0sXG4gICAgICAgICAgICBhY3Rpb246IHsgdmFsdWU6IFwicmVhZFwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgLy8gZm9yIGFjdGlvbiBjYWxsXG4gICAgICAgICAgICBtZXRob2RJZDogeyB2YWx1ZTogXCJcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIG9iamVjdElkOiB7IHZhbHVlOiBcIlwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBpbnB1dHM6LFxuICAgICAgICBvdXRwdXRzOiAyLFxuICAgICAgICBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgfHwgXCJPUENVQS1DYWxsXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsU3R5bGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gXCJub2RlX2xhYmVsX2l0YWxpY1wiIDogXCJcIjtcbiAgICAgICAgfSxcbiAgICAgICAgb25lZGl0cHJlcGFyZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzO1xuICAgICAgICAgICAgZGVjbGFyZU5vZGVCcm93c2VyV2lkZ2V0KCk7XG4gICAgICAgICAgICBub2RlLmlucHV0cyA9IDE7XG4gICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgLy8gaGFuZGxlIFNlY3Rpb24gQ2FsbFxuICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgIGxldCBkYXRhVHlwZXMgPSB7fTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2FsbGluZyBub2RlQnJvd3NlclwiKTtcbiAgICAgICAgICAgIC8vIHRvIGRvIGFkZCBhIHR5cGVzY3JpcHQgZGVmaW5pdGlvbiBmb3IgdGhpc1xuICAgICAgICAgICAgY29uc3QgJG9iamVjdElkID0gJChcIiNub2RlLWlucHV0LW9iamVjdElkXCIpO1xuICAgICAgICAgICAgY29uc3QgJG1ldGhvZElkID0gJChcIiNub2RlLWlucHV0LW1ldGhvZElkXCIpO1xuICAgICAgICAgICAgY29uc3QgJGlucHV0QXJndW1lbnREZWZpbml0aW9uID0gJChcIiNtZXRob2QtaW5wdXQtYXJndW1lbnQtZGVmaW5pdGlvblwiKTtcbiAgICAgICAgICAgIGNvbnN0ICRvdXRwdXRBcmd1bWVudERlZmluaXRpb24gPSAkKFwiI21ldGhvZC1vdXRwdXQtYXJndW1lbnQtZGVmaW5pdGlvblwiKTtcbiAgICAgICAgICAgIGNvbnN0ICR2YWxpZGF0ZUJ0biA9ICQoXCIjdmFsaWRhdGUtY2FsbC1hcmd1bWVudHMtYnV0dG9uXCIpO1xuICAgICAgICAgICAgJG9iamVjdElkLm5vZGVCcm93c2VyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZ2V0RW5kcG9pbnRQYXJhbWV0ZXJzSGFuZGxlcigpKSwgeyBmaWx0ZXIobm9kZURlc2MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVEZXNjLm5vZGVDbGFzcyA9PT0gXCJPYmplY3RcIjtcbiAgICAgICAgICAgICAgICB9IH0pKTtcbiAgICAgICAgICAgICRtZXRob2RJZC5ub2RlQnJvd3NlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldEVuZHBvaW50UGFyYW1ldGVyc0hhbmRsZXIoKSksIHsgcGFyZW50Tm9kZTogKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlc3luYyB3aXRoIHdoYXQncyBpbiAgI25vZGUtaW5wdXQtb2JqZWN0SWRcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZmVyZW5jZSA9ICRvYmplY3RJZC5kYXRhKFwicmVmZXJlbmNlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkRXggPSAkb2JqZWN0SWQudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRwb2ludE5vZGUgPSBnZXRFbmRQb2ludEF0dHJpYnV0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5kcG9pbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uRGF0YSA9IHsgYmFzZVVybDogXCJcIiwgZW5kcG9pbnQ6IFwiXCIsIGVuZHBvaW50Tm9kZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByID0geWllbGQgY2hlY2tOb2RlSWQoY29ubmVjdGlvbkRhdGEsIG5vZGVJZEV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgPSByLnJlZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgICAgICAgICAgfSksIGZpbHRlcihub2RlRGVzYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZURlc2Mubm9kZUNsYXNzID09PSBcIk1ldGhvZFwiIHx8IG5vZGVEZXNjLm5vZGVDbGFzcyA9PT0gXCJPYmplY3RcIjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0YWJsZShub2RlRGVzYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZURlc2Mubm9kZUNsYXNzID09PSBcIk1ldGhvZFwiO1xuICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICAgICAgJG9iamVjdElkLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAkbWV0aG9kSWQubm9kZUJyb3dzZXIoXCJyZXNldFwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYWxsaW5nIG5vZGVCcm93c2VyIERvbmVcIik7XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRBcmd1bWVudEN0cmwoY29udGFpbmVyLCBpbmRleCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9ICQoJzxkaXYgY2xhc3M9XCJhcmd1bWVudC1lbnRyeVwiPicpLmFwcGVuZFRvKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLmRhdGEoXCJkYXRhXCIsIGFyZyk7XG4gICAgICAgICAgICAgICAgJCgnPGlucHV0IHR5cGU9XCJ0ZXh0XCI+JylcbiAgICAgICAgICAgICAgICAgICAgLnZhbChhcmcubmFtZSB8fCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAuY3NzKHsgd2lkdGg6IFwiMTAwJVwiIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhpdGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGF0YVR5cGVzW2FyZy5kYXRhVHlwZS50b1N0cmluZygpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVHlwZU4gPSAoZCA/IGQuYnJvd3NlTmFtZS5uYW1lIHx8IFwiXCIgOiBhcmcuZGF0YVR5cGUudG9TdHJpbmcoKSkgKyAoYXJnLnZhbHVlUmFuayA9PT0gMSA/IFwiW11cIiA6IFwiXCIpO1xuICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPVwidGV4dFwiPicpXG4gICAgICAgICAgICAgICAgICAgIC52YWwoYXJnLmRlc2NyaXB0aW9uLnRleHQgfHwgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgLmNzcyh7IHdpZHRoOiBcIjUwJVwiIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhpdGVtKTtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cInRleHRcIj4nKVxuICAgICAgICAgICAgICAgICAgICAudmFsKGRhdGFUeXBlTiB8fCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAuY3NzKHsgd2lkdGg6IFwiNTAlXCIgfSlcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlucHV0QXJndW1lbnREZWZpbml0aW9uLmVkaXRhYmxlTGlzdCh7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIHNjcm9sbE9uQWRkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhZGRJdGVtKGNvbnRhaW5lciwgaSwgb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50Q3RybChjb250YWluZXIsIGksIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJG91dHB1dEFyZ3VtZW50RGVmaW5pdGlvbi5lZGl0YWJsZUxpc3Qoe1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICBzY3JvbGxPbkFkZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYWRkSXRlbShjb250YWluZXIsIGksIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRBcmd1bWVudEN0cmwoY29udGFpbmVyLCBpLCBvYmplY3QpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGluc3RhbGxBcmd1bWVudExpc3QobGlzdCwgbWV0aG9kQXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbnN0YWxsQXJndW1lbnRMaXN0XCIsIG1ldGhvZEFyZ3VtZW50cy5sZW5ndGgsIFwiYXJndW1lbnRzXCIsIG1ldGhvZEFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgbGlzdC5lZGl0YWJsZUxpc3QoXCJlbXB0eVwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGhvZEFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsaXN0LmVkaXRhYmxlTGlzdChcImFkZEl0ZW1cIiwgbWV0aG9kQXJndW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkaW5wdXRBcmd1bWVudERlZmluaXRpb24uaGlkZSgpO1xuICAgICAgICAgICAgJG91dHB1dEFyZ3VtZW50RGVmaW5pdGlvbi5oaWRlKCk7XG4gICAgICAgICAgICBtYW5hZ2VBUElDYWxsKFwidmFsaWRhdGVcIiwgJHZhbGlkYXRlQnRuLCAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIHVybDogXCIvb3BjdWEtZW5kcG9pbnQyL2FyZ3VtZW50RGVmaW5pdGlvblwiLFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROb2RlOiBnZXRFbmRwb2ludFBhcmFtZXRlcnMoKSxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6ICRvYmplY3RJZC52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kSWQ6ICRtZXRob2RJZC52YWwoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcG9wdWxhdGUgdGhlIGxpc3RcbiAgICAgICAgICAgICAgICBjb25zdCBhcmd1bWVudERlZmluaXRpb24gPSBkYXRhLmFyZ3VtZW50RGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBkYXRhLmRhdGFUeXBlcztcbiAgICAgICAgICAgICAgICAkaW5wdXRBcmd1bWVudERlZmluaXRpb24uc2hvdygpO1xuICAgICAgICAgICAgICAgICRvdXRwdXRBcmd1bWVudERlZmluaXRpb24uc2hvdygpO1xuICAgICAgICAgICAgICAgIGluc3RhbGxBcmd1bWVudExpc3QoJGlucHV0QXJndW1lbnREZWZpbml0aW9uLCBhcmd1bWVudERlZmluaXRpb24uaW5wdXRBcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGluc3RhbGxBcmd1bWVudExpc3QoJG91dHB1dEFyZ3VtZW50RGVmaW5pdGlvbiwgYXJndW1lbnREZWZpbml0aW9uLm91dHB1dEFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJkYXRhXCIsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uZWRpdHNhdmUoKSB7IH0sXG4gICAgfSk7XG5cbn0pKCk7Il19
|
9
|
+
</script>
|
10
|
+
<script type="text/x-red" data-template-name="OpcUa-Client2-Call">
|
11
|
+
<div class="form-row">
|
12
|
+
<label for="node-input-name"><i class="icon-tasks"></i>Name</label>
|
13
|
+
<input type="text" id="node-input-name" placeholder="enter the friendly name of the node" />
|
14
|
+
</div>
|
15
|
+
<div class="form-row">
|
16
|
+
<label for="node-input-endpoint"><i class="icon-tasks"></i> Endpoint</label>
|
17
|
+
<input type="text" id="node-input-endpoint" placeholder="opc.tcp://localhost:4334" />
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<div class="form-row">
|
21
|
+
<label for="node-input-objectId"><i class="fa fa-object"></i>ObjectId</label>
|
22
|
+
<input type="text" id="node-input-objectId" />
|
23
|
+
</div>
|
24
|
+
<div class="form-row">
|
25
|
+
<label for="node-input-methodId"><i class="fa fa-object"></i>MethodId</label>
|
26
|
+
<input type="text" id="node-input-methodId" />
|
27
|
+
</div>
|
28
|
+
<div class="form-row">
|
29
|
+
<button id="validate-call-arguments-button" class="btn btn-primary" style="margin-left: 10px">
|
30
|
+
<i class="fa fa-flask"></i>Check
|
31
|
+
</button>
|
32
|
+
|
33
|
+
<i id="validate-pending" class="fa fa-spinner" aria-hidden="true" color="green"></i>
|
34
|
+
<i id="validate-success" class="fa fa-check-square" aria-hidden="true" style="color: green; font-size: 1.2em"></i>
|
35
|
+
<i id="validate-failure" class="fa fa-exclamation-triangle" aria-hidden="true" style="color: red; font-size: 1.2em"></i>
|
36
|
+
<span id="validate-messages"></span>
|
37
|
+
</div>
|
38
|
+
<div class="form-row">
|
39
|
+
<legend>input arguments</legend>
|
40
|
+
<div id="method-input-argument-definition"></div>
|
41
|
+
<legend>output arguments</legend>
|
42
|
+
<div id="method-output-argument-definition"></div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
</script>
|
46
|
+
|
47
|
+
<script type="text/markdown" data-help-name="OpcUa-Client2-Call">
|
48
|
+
### Perform a Method Call
|
49
|
+
|
50
|
+
</script>
|
@@ -0,0 +1,2 @@
|
|
1
|
+
.sterfve-combo-box{position:relative;width:100%}.sterfve-combo-box .sterfve-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:150px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfve-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome;font-size:8pt;font-weight:900;margin-right:5px}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-left:15px}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.input-group{align-items:center;border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.input-group input{border:none;flex:1;outline:none;padding:8px}.input-group button{background-color:#f1f1f1;border:none;border-left:1px solid #ccc;cursor:pointer;padding:8px 16px}.input-group button:hover{background-color:#ddd}.info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfve-combo-box .sterfve-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003}
|
2
|
+
/*# sourceMappingURL=OpcUa-Client2-Monitor.css.map */
|