1
0
Fork 0
merge-requests/1/head
progr76@gmail.com 2019-02-10 22:53:54 +03:00
parent 5b2c8d4ca1
commit 3029d69c0e
179 changed files with 56720 additions and 0 deletions

BIN
Bin/Light/Tera-light.zip Normal file

Binary file not shown.

Binary file not shown.

BIN
Doc/Chinese/Mining.pdf Normal file

Binary file not shown.

BIN
Doc/Chinese/WP_chinese.pdf Normal file

Binary file not shown.

220
Doc/Eng/API.md Normal file
View File

@ -0,0 +1,220 @@
## API
This API is available if the node is running public http-access. Set the constant HTTP_HOSTING_PORT.
#### Getting the current status of the blockchain
http://194.1.237.94/GetCurrentInfo?Diagram=0
Result:
* MaxNumBlockDB - the maximum block number stored in the database (the current height of the blockchain)
* CurBlockNum - new block to create
* MaxAccID - current maximum account number
* MaxDappsID - current maximum Dapp number
* VersionNum - version of the program on which the node works
An example of the result:
```
{"result":1,"VersionNum":706,"MaxNumBlockDB":12371158,"CurBlockNum":12371166,"MaxAccID":187783,"MaxDappsID":20,"FIRST_TIME_BLOCK":1530446400000}
```
#### Get a list of nodes that have a public API
http://194.1.237.94/GetNodeList
An example of the result:
```
{"arr":[{"ip":"149.154.70.158","port":80},{"ip":"195.211.195.236","port":88}],"result":1}
```
#### Getting a list of accounts
http://194.1.237.94/GetAccountList?StartNum=0&CountNum=1
An example of the result:
```
{"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"Name":"System account","Value":{"SumCOIN":735207181,"SumCENT":160466160,"OperationID":29702004,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":0,"WN":"","PubKeyStr":"000000000000000000000000000000000000000000000000000000000000000000"}],"result":1}
```
#### Getting a list of blocks
http://194.1.237.94/GetBlockList?StartNum=12373020&CountNum=1
An example of the result:
```
{"arr":[{"Info":"","TreeHash":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"AddrHash":[59,221,2,0,0,0,245,10,0,0,0,0,51,114,239,24,0,0,83,43,13,45,0,0,109,0,111,11,175,220,151,110],"PrevHash":[43,137,15,86,33,224,34,209,250,223,179,165,117,195,85,221,20,170,165,242,21,224,66,113,34,236,242,73,175,220,151,110],"SumHash":[161,234,144,48,195,161,175,59,95,210,65,224,12,209,47,194,107,237,238,253,203,103,50,204,176,175,14,165,123,176,151,31],"SumPow":343061509,"BodyFileNum":0,"TrDataPos":171851211,"TrDataLen":45,"TrCount":0,"BlockNum":12373020,"SeqHash":[203,159,178,200,40,56,216,192,98,72,79,17,138,85,110,107,9,236,236,192,221,31,8,3,64,220,78,104,23,69,185,237],"Hash":[201,154,249,76,189,63,83,170,17,113,155,168,49,61,237,225,23,82,25,64,252,187,83,235,66,123,53,140,224,15,213,30],"PowHash":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Power":42,"bSave":true,"Prepared":true,"Num":12373020,"Miner":187707,"Hash1":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Hash2":[0,0,0,0,0,0,26,182,13,93,155,155,161,188,243,123,15,140,197,136,187,52,200,57,96,167,222,160,83,243,232,92]}],"result":1}
```
#### Getting a list of block transactions
http://194.1.237.94/GetTransactionList?BlockNum=12373020?StartNum=0&CountNum=10
An example of the result:
```
{"arr":[{"body":{"type":"Buffer","data":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102]},"num":6656082722574,"hashPow":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"HASH":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"power":3,"TimePow":6656082722578.715,"Num":0,"Type":119,"Length":39,"Body":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102],"Script":"{\n \"Type\": 119,\n \"BlockNum\": 12372020,\n \"Hash\": \"BF124C2EB16F1A6ECB9F17EB924DC7019559888E0E3F72BD0D063C1C4C0B9266\"\n}","Verify":1,"VerifyHTML":"<B style='color:green'></B>"}],"result":1}
```
#### Getting a list of DAPs
http://194.1.237.94/GetDappList?StartNum=8&CountNum=1
An example of the result:
```
{"arr":[{"Version":0,"TokenGenerate":0,"ISIN":"","Zip":0,"BlockNum":10034043,"TrNum":0,"IconBlockNum":10033892,"IconTrNum":0,"ShortName":"","Name":"List-Lib","Account":187007,"AccountLength":1,"Category1":40,"Category2":0,"Category3":0,"Owner":186573,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"StateFormat":"","Description":"List-lib v1.0","Num":"8","CodeLength":3705,"HTMLLength":0}],"result":1}
```
#### Getting a list of accounts by public key
http://194.1.237.94/GetAccountListByKey?Key=027AE0DCE92D8BE1F893525B226695DDF0FE6AD756349A76777FF51F3B59067D70
Result:
```
{"result":1,"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[2,122,224,220,233,45,139,225,248,147,82,91,34,102,149,221,240,254,106,215,86,52,154,118,119,127,245,31,59,89,6,125,112]},"Name":"Founder account","Value":{"SumCOIN":40000005,"SumCENT":0,"OperationID":7,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":8,"WN":""}]}
```
Note: public key in hex format can be taken from the wallet on EXPLORER -> Accounts (PubKey column)
#### Sending a transaction
http://194.1.237.94/SendTransactionHex?Hex=6F030000000000002D00000000000100000000008400000000000100000000000000000004007465737425000000000000007AA29739FD458DF8AB1139881DAA4584CCDA3D4995B6849FB1F55F3B2EA40704116647823E97A60C70213EFA8D83CBFBEE6D753FCA6771B4792985B57186F3BCFBCEC0000000930600000000
Result:
```
{"result":1,"text":"OK"}
```
Note: The transaction in hex format can be obtained if you use a functions from the js-library
* The library is located at: https://github.com/terafoundation/wallet/raw/master/Bin/Light/Tera-light.zip
* Example: http://dappsgate.com/test-api.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test2-API </title>
<script type="text/javascript" src="./JS/client.js"></script>
<script type="text/javascript" src="./JS/sha3.js"></script>
<script type="text/javascript" src="./JS/crypto-client.js"></script>
<script type="text/javascript" src="./JS/terahashlib.js"></script>
<script type="text/javascript" src="./JS/wallet-lib.js"></script>
<script type="text/javascript" src="./JS/sign-lib-min.js"></script>
<script>
//Init
window.onload=function ()
{
window.DELTA_FOR_TIME_TX=4;
window.MainServer={ip:"dappsgate.com",port:80};
//run every 1 sec for getting current block number and network time
setInterval(function ()
{
GetData("GetCurrentInfo",{}, function (Data)
{
if(Data && Data.result)
SetBlockChainConstant(Data);
});
},1000);
}
//Use API
function SignTr()
{
var PrivKey=$("idPrivKey").value;
var TR=JSON.parse($("idTr").value);
GetSignTransaction(TR,PrivKey,function ()
{
TR.Sign=GetHexFromArr(TR.Sign);
$("idTr").value=JSON.stringify(TR,"",4);
});
}
function GetHexFromTr()
{
var TR=JSON.parse($("idTr").value);
var Body=GetArrFromTR(TR);
if(!TR.Sign)
{
$("idOut").value="Error: sign tx";
return "";
}
var Arr=GetArrFromHex(TR.Sign);
WriteArr(Body,Arr,64);
Body.length+=12;
CreateHashBodyPOWInnerMinPower(Body);
var StrHex=GetHexFromArr(Body);
$("idOut").value=StrHex;
return StrHex;
}
function SendTr()
{
var StrHex=GetHexFromTr();
if(!StrHex)
return;
GetData("SendTransactionHex",{Hex:StrHex}, function (Data)
{
if(Data && Data.result)
{
$("idOut").value=Data.text;
}
else
{
if(Data)
$("idOut").value="Error: "+Data.text;
else
$("idOut").value="Error";
}
});
}
</script>
</head>
<body>
<B>Priv key:</B>
<INPUT type="search" id="idPrivKey" value="7AF1726733E39D95DD7E9DAD1F6F2B76D0477B3B604439B1353B97BC24A72844" style="width: 600px"><BR>
<B>Tx</B> (after each transaction is sent, the OperationID number is increased by 1):<BR>
<textarea id="idTr" rows="20" cols="98">
{
"Type": 111,
"Version": 3,
"Reserve": 0,
"FromID": 189115,
"OperationID": 2,
"To": [
{
"PubKey": "",
"ID": 9,
"SumCOIN": 0,
"SumCENT": 1
}
],
"Description": "Test",
"Body": "",
"Sign": ""
}
</textarea><BR>
<B>Actions:</B><BR>
<button onclick="SignTr()">Sign Tx</button>
<button onclick="GetHexFromTr()">Get Hex</button>
<button onclick="SendTr()">Send tx</button>
<BR><B>Result:</B><BR>
<textarea id="idOut" rows="20" cols="98"></textarea>
</body>
</html>
```

61
Doc/Eng/CONSTANTS.MD Normal file
View File

@ -0,0 +1,61 @@
Description of constants:
````javascript
{
//IDENTIFICATION OF GLOBAL NETWORK TIME OF TERA
"AUTO_COORECT_TIME": 1, //a sign the auto correction time according to network time Tera - must be activated
"DELTA_CURRENT_TIME": 12345, //time deviation relative to Tera network (set automatically if auto-correction is enabled)
//IDENTIFICATION OF NODES
"COMMON_KEY": "TRUST-CLUSTER", //the total key for the trusted nodes (the nodes not to ban each other)
"NODES_NAME": "Node001", //the name of the trusted node that appears on the NETWORK page
"SERVER_PRIVATE_KEY_HEX": "222222222222222222222222222222222222222222222",//private key of the node, which is used to set the node address
"USE_NET_FOR_SERVER_ADDRES": 1, //indicates whether to add information from the mac address to the node address. Useful when copying nodes - no need to manually change private nodes
//DIRECT CONNECTION
"NET_WORK_MODE": {
"ip": "", //the IP address of the node, if not specified, is determined automatically
"port": 30000, //port
"UseDirectIP": true //indication of direct connection, if not specified, then the gray ip mode is enabled without the possibility of mining
},
//STATISTICS
"STAT_MODE": 1, //enable statistics-see Counters, Monitor pages
"MAX_STAT_PERIOD": 3600, //statistics period
//HTTP access to the wallet and control Noda
"HTTP_PORT_NUMBER": 8000, //http access port
"HTTP_PORT_PASSWORD": "SecretWord", //password
"HTTP_IP_CONNECT": "123.111.222.233, 123.11.22.223", //enable IP address filter for remote management (wallet) over http
"WALLET_NAME": "=Node1=", //the name of the wallet displayed on the tab in the browser
//Information display
"COUNT_VIEW_ROWS": 20, //number of rows per page - displayed in all tables with pagination
"ALL_VIEW_ROWS": 1, //view all rows of blockchain tables, even if they are blacklisted (for example, accounts created by hackers or DAPs misleading)
"ALL_LOG_TO_CLIENT": 1, //displaying the node log in the wallet
//MINING:
"USE_MINING": true, //enable mining
"MINING_START_TIME": "6:30", //mining start time during the day in the format hh:mm: ss time in UTC (mining must be enabled by the constant USE_MINING), if the value is not set then mining is performed all the time
"MINING_PERIOD_TIME": "16:30", //the period of mining since the beginning of the format hh: mm:ss
"POW_MAX_PERCENT": "70", //max CPU usage as a percentage of each mining process
"COUNT_MINING_CPU": 0, //number of processes to run during mining
"SIZE_MINING_MEMORY": 20000000, //the total number of memory allocated for mining on all processes (in bytes)
"POW_RUN_COUNT": 5000, //the number of hashes (hash1, hash2) calculated at each mining iteration in each process (each iteration is started once in 1 MS - but within this second the POW_MAX_PERCENT parameter is taken)
"POW_RUN_COUNT_FIND": 1000, //the number of hashes (hash2) that are searched by brute force to improve the search probability. Recommended value is equal to the number of network nodes (with the same power)
//ETC
"USE_AUTO_UPDATE": 1, //using online auto-updates
"RESTART_PERIOD_SEC": 0, //auto restart nodes after a specified period in seconds
"MAX_GRAY_CONNECTIONS_TO_SERVER": 10,//the number of servers to which the node connects in gray ip mode
"TRANSACTION_PROOF_COUNT": 2000000, //number of transactions stored in the database to be able to roll back the chain
//WATCHDOG
"WATCHDOG_BADACCOUNT": 1, //watching for errors of the type "BAD ACCOUNT"
"COREY_WATCH_DOG": 1 //watching for the chain of sync with the public network when mining
}
````

Binary file not shown.

217
Doc/Rus/API.md Normal file
View File

@ -0,0 +1,217 @@
## API
Данный API доступен если на ноде запущен публичный http-доступ. Т.е. задана константа HTTP_HOSTING_PORT
#### Получение текущего статуса блокчейна
http://194.1.237.94/GetCurrentInfo?Diagram=0
Result:
* MaxNumBlockDB - максимальный номер блока записанный в БД (текущая высота блокчейна)
* CurBlockNum - новый формируемый блок
* MaxAccID - текущий максимальный номер счета
* MaxDappsID - текущий максимальный номер Dapp
* VersionNum - версия программы на которой работает нода
Пример результата:
```
{"result":1,"VersionNum":706,"MaxNumBlockDB":12371158,"CurBlockNum":12371166,"MaxAccID":187783,"MaxDappsID":20,"FIRST_TIME_BLOCK":1530446400000}
```
#### Получение списка нод, имеющий публичный интерфейс API
http://194.1.237.94/GetNodeList
Пример результата:
```
{"arr":[{"ip":"149.154.70.158","port":80},{"ip":"195.211.195.236","port":88}],"result":1}
```
#### Получение списка счетов
http://194.1.237.94/GetAccountList?StartNum=0&CountNum=1
Пример результата:
```
{"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"Name":"System account","Value":{"SumCOIN":735207181,"SumCENT":160466160,"OperationID":29702004,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":0,"WN":"","PubKeyStr":"000000000000000000000000000000000000000000000000000000000000000000"}],"result":1}
```
#### Получение списка блоков
http://194.1.237.94/GetBlockList?StartNum=12373020&CountNum=1
Пример результата:
```
{"arr":[{"Info":"","TreeHash":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"AddrHash":[59,221,2,0,0,0,245,10,0,0,0,0,51,114,239,24,0,0,83,43,13,45,0,0,109,0,111,11,175,220,151,110],"PrevHash":[43,137,15,86,33,224,34,209,250,223,179,165,117,195,85,221,20,170,165,242,21,224,66,113,34,236,242,73,175,220,151,110],"SumHash":[161,234,144,48,195,161,175,59,95,210,65,224,12,209,47,194,107,237,238,253,203,103,50,204,176,175,14,165,123,176,151,31],"SumPow":343061509,"BodyFileNum":0,"TrDataPos":171851211,"TrDataLen":45,"TrCount":0,"BlockNum":12373020,"SeqHash":[203,159,178,200,40,56,216,192,98,72,79,17,138,85,110,107,9,236,236,192,221,31,8,3,64,220,78,104,23,69,185,237],"Hash":[201,154,249,76,189,63,83,170,17,113,155,168,49,61,237,225,23,82,25,64,252,187,83,235,66,123,53,140,224,15,213,30],"PowHash":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Power":42,"bSave":true,"Prepared":true,"Num":12373020,"Miner":187707,"Hash1":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Hash2":[0,0,0,0,0,0,26,182,13,93,155,155,161,188,243,123,15,140,197,136,187,52,200,57,96,167,222,160,83,243,232,92]}],"result":1}
```
#### Получение списка транзакций блока
http://194.1.237.94/GetTransactionList?BlockNum=12373020?StartNum=0&CountNum=10
Пример результата:
```
{"arr":[{"body":{"type":"Buffer","data":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102]},"num":6656082722574,"hashPow":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"HASH":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"power":3,"TimePow":6656082722578.715,"Num":0,"Type":119,"Length":39,"Body":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102],"Script":"{\n \"Type\": 119,\n \"BlockNum\": 12372020,\n \"Hash\": \"BF124C2EB16F1A6ECB9F17EB924DC7019559888E0E3F72BD0D063C1C4C0B9266\"\n}","Verify":1,"VerifyHTML":"<B style='color:green'></B>"}],"result":1}
```
#### Получение списка ДАпов
http://194.1.237.94/GetDappList?StartNum=8&CountNum=1
Пример результата:
```
{"arr":[{"Version":0,"TokenGenerate":0,"ISIN":"","Zip":0,"BlockNum":10034043,"TrNum":0,"IconBlockNum":10033892,"IconTrNum":0,"ShortName":"","Name":"List-Lib","Account":187007,"AccountLength":1,"Category1":40,"Category2":0,"Category3":0,"Owner":186573,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"StateFormat":"","Description":"List-lib v1.0","Num":"8","CodeLength":3705,"HTMLLength":0}],"result":1}
```
#### Получение списка счетов по публичному ключу
http://194.1.237.94/GetAccountListByKey?Key=027AE0DCE92D8BE1F893525B226695DDF0FE6AD756349A76777FF51F3B59067D70
Результат:
```
{"result":1,"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[2,122,224,220,233,45,139,225,248,147,82,91,34,102,149,221,240,254,106,215,86,52,154,118,119,127,245,31,59,89,6,125,112]},"Name":"Founder account","Value":{"SumCOIN":40000005,"SumCENT":0,"OperationID":7,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":8,"WN":""}]}
```
Комментарий: публичный ключ в формате hex можно взять из кошельке на EXPLORER->Accounts (колонка PubKey)
#### Отправка транзакции
http://194.1.237.94/SendTransactionHex?Hex=6F030000000000002D00000000000100000000008400000000000100000000000000000004007465737425000000000000007AA29739FD458DF8AB1139881DAA4584CCDA3D4995B6849FB1F55F3B2EA40704116647823E97A60C70213EFA8D83CBFBEE6D753FCA6771B4792985B57186F3BCFBCEC0000000930600000000
Результат:
```
{"result":1,"text":"OK"}
```
Комментарий: транзакцию в формате hex можно получить если использовать функции из библиотек на языке javascript
* Библиотеки находятся по адресу: https://github.com/terafoundation/wallet/raw/master/Bin/Light/Tera-light.zip
* Пример: http://dappsgate.com/test-api.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test2-API </title>
<script type="text/javascript" src="./JS/client.js"></script>
<script type="text/javascript" src="./JS/sha3.js"></script>
<script type="text/javascript" src="./JS/crypto-client.js"></script>
<script type="text/javascript" src="./JS/terahashlib.js"></script>
<script type="text/javascript" src="./JS/wallet-lib.js"></script>
<script type="text/javascript" src="./JS/sign-lib-min.js"></script>
<script>
//Init
window.onload=function ()
{
window.DELTA_FOR_TIME_TX=4;
window.MainServer={ip:"dappsgate.com",port:80};
//run every 1 sec for getting current block number and network time
setInterval(function ()
{
GetData("GetCurrentInfo",{}, function (Data)
{
if(Data && Data.result)
SetBlockChainConstant(Data);
});
},1000);
}
//Use API
function SignTr()
{
var PrivKey=$("idPrivKey").value;
var TR=JSON.parse($("idTr").value);
GetSignTransaction(TR,PrivKey,function ()
{
TR.Sign=GetHexFromArr(TR.Sign);
$("idTr").value=JSON.stringify(TR,"",4);
});
}
function GetHexFromTr()
{
var TR=JSON.parse($("idTr").value);
var Body=GetArrFromTR(TR);
if(!TR.Sign)
{
$("idOut").value="Error: sign tx";
return "";
}
var Arr=GetArrFromHex(TR.Sign);
WriteArr(Body,Arr,64);
Body.length+=12;
CreateHashBodyPOWInnerMinPower(Body);
var StrHex=GetHexFromArr(Body);
$("idOut").value=StrHex;
return StrHex;
}
function SendTr()
{
var StrHex=GetHexFromTr();
if(!StrHex)
return;
GetData("SendTransactionHex",{Hex:StrHex}, function (Data)
{
if(Data && Data.result)
{
$("idOut").value=Data.text;
}
else
{
if(Data)
$("idOut").value="Error: "+Data.text;
else
$("idOut").value="Error";
}
});
}
</script>
</head>
<body>
<B>Priv key:</B>
<INPUT type="search" id="idPrivKey" value="7AF1726733E39D95DD7E9DAD1F6F2B76D0477B3B604439B1353B97BC24A72844" style="width: 600px"><BR>
<B>Tx</B> (after each transaction is sent, the OperationID number is increased by 1):<BR>
<textarea id="idTr" rows="20" cols="98">
{
"Type": 111,
"Version": 3,
"Reserve": 0,
"FromID": 189115,
"OperationID": 2,
"To": [
{
"PubKey": "",
"ID": 9,
"SumCOIN": 0,
"SumCENT": 1
}
],
"Description": "Test",
"Body": "",
"Sign": ""
}
</textarea><BR>
<B>Actions:</B><BR>
<button onclick="SignTr()">Sign Tx</button>
<button onclick="GetHexFromTr()">Get Hex</button>
<button onclick="SendTr()">Send tx</button>
<BR><B>Result:</B><BR>
<textarea id="idOut" rows="20" cols="98"></textarea>
</body>
</html>
```

63
Doc/Rus/CONSTANTS.MD Normal file
View File

@ -0,0 +1,63 @@
Назначение констант:
````javascript
{
//ИДЕНТИФИКАЦИЯ ГЛОБАЛЬНОГО ВРЕМЕНИ СЕТИ ТЕРА
"AUTO_COORECT_TIME": 1, //признак автокорректировки времени по времени сети Тера - должно быть включено всегда
"DELTA_CURRENT_TIME": 12345, //отклонение времени относительно сети Тера (устанавливается автоматически если включена автокорректировка)
//ИДЕНТИФИКАЦИЯ НОДЫ
"COMMON_KEY": "TRUST-CLUSTER", //общий ключ доверенных нод (ноды не банят друг друга)
"NODES_NAME": "Node001", //имя доверенной ноды, которое отображается на странице NETWORK
"SERVER_PRIVATE_KEY_HEX": "222222222222222222222222222222222222222222222",//приватный ключ ноды, по которому задается адрес ноды
"USE_NET_FOR_SERVER_ADDRES": 1, //признак добавления в адрес ноды информации из mac адреса. Полезно при копировании нод-не нужно вручную менять приватники нод
//ПРЯМОЕ ПОДКЛЮЧЕНИЕ
"NET_WORK_MODE": {
"ip": "", //ip-адрес ноды, если не задан определяется автоматически
"port": 30000, //порт
"UseDirectIP": true //признак прямого подключения, если не задан, то включается режим серых ip без возможности майнинга
},
//СТАТИСТИКА
"STAT_MODE": 1, //включение статистики - см. страницы Counters, Monitor
"MAX_STAT_PERIOD": 3600, //период статистики
//HTTP доступ к кошельку и управлению нодой
"HTTP_PORT_NUMBER": 8000, //порт http - доступа
"HTTP_PORT_PASSWORD": "SecretWord", //пароль
"HTTP_IP_CONNECT": "123.111.222.233, 123.11.22.223", //включение фильтра ip адресов по которому доступно удаленное управление(wallet) по http
"WALLET_NAME": "=Node1=", //имя кошелька отображаемого на закладке в браузере
//Отображение информации
"COUNT_VIEW_ROWS": 20, //число строк в одной странице - отображается во всех таблицах с пагинацией
"ALL_VIEW_ROWS": 1, //просмотр всех строк таблиц блокчейна, даже если они попали в черных список (например аккаунты созданные хакерами или Дапы вводящие в заблуждение)
"ALL_LOG_TO_CLIENT": 1, //отображение лога ноды в кошельке
//МАЙНИНГ:
"USE_MINING": true, //включение майнинга
"MINING_START_TIME": "6:30", //время начала работы майнинга в течении суток в формате hh:mm:ss время в UTC (при этом майнинг должен быть включен константой USE_MINING), если значение не задано то майнинг выполняется все время
"MINING_PERIOD_TIME": "16:30", //период работы майнинга с момента начала формате hh:mm:ss
"POW_MAX_PERCENT": "70", //макс использование CPU в процентах на каждый процесс при майнинге
"COUNT_MINING_CPU": 0, //число процессов запускаемых при майнинге
"SIZE_MINING_MEMORY": 20000000, //общее число памяти выделяемое для майнинга на все процессы (величина в байтах)
"POW_RUN_COUNT": 5000, //число хешей (hash1, hash2) рассчитанных при каждой итерации майнинга в каждом процессе (каждая итерация запускается раз в 1 мс - но в пределах секунды учитывается параметр POW_MAX_PERCENT)
"POW_RUN_COUNT_FIND": 1000, //число хешей (hash2), которые ищутся путем перебора для улучшения вероятности поиска. Рекомендуется значение равное количеству нод сети (с такой же мощностью).
//ПРОЧЕЕ
"USE_AUTO_UPDATE": 1, //использование автообновлений из сети
"RESTART_PERIOD_SEC": 0, //авто рестарт ноды через заданный период в сек
"MAX_GRAY_CONNECTIONS_TO_SERVER": 10,//число серверов, к которым подключается нода в режиме серых ip
"TRANSACTION_PROOF_COUNT": 2000000, //число транзакций сохраняемых в базе данных для возможности отката цепочки назад
//WATCHDOG
"WATCHDOG_BADACCOUNT": 1, //слежение за наличием ошибок тип "BAD ACCOUNT"
"COREY_WATCH_DOG": 1 //слежение за расcинхронизацией цепочки с общей сетью при майнинге
}
````

283
Doc/Rus/README.md Normal file
View File

@ -0,0 +1,283 @@
# TERA PLATFORM
## Легкий кошелек (веб-версия):
https://terafoundation.org/web-wallet.html
* Примечание: легкий кошелек имеет децентрализованное ядро - т.е. работает со всеми доступными нодами в сети
## Установка легкого кошелька на Windows:
* https://sourceforge.net/p/tera/code/ci/master/tree/Bin/Light/tera_light_setup.exe?format=raw
* [Light client (zip)](https://sourceforge.net/p/tera/code/ci/master/tree/Bin/Light/Tera-light.zip?format=raw)
## Установка полной ноды из исходников по шагам:
Внимание:
* Для быстрой начальной загрузки кошелька выложена [ссылка](https://sourceforge.net/p/tera/code/ci/master/tree/Torrent/Tera-folder-DB.torrent?format=raw) на загрузку базы данных по P2P протоколу. Скачайте через торрент файл и распакуйте его. Далее положите папку DB в каталог DATA кошелька (с полной заменой).
* После установки, указанной ниже, введите в браузере публичный адрес вашего сервера, например: 12.34.56.78:8080
* Для майнинга Вам нужно иметь статический (или публичный) IP-адрес и открытый порт.
* Не храните приватные ключи на удаленных серверах.
* Рекомендуем поставить дополнительный пароль на приватный ключ (кнопка "Set password") - в этом случае приватный ключ будет храниться в файле кошелька в зашифрованном виде.
* Если вы не указали http пароль, то возможен доступ только с локального адреса: 127.0.0.1:8080
* Установите удаленный доступ к ноде только из заданного узла через константу HTTP_IP_CONNECT (например: "HTTP_IP_CONNECT":"122.22.33.11, 122.22.33.12")
* При установке обратите внимание на криптографическую библиотеку **secp256k1**. При ее компиляции (командной npm install) не должно быть ошибок.
## Установка на Windows:
1. Скачайте и установите Nodejs https://nodejs.org (рекомендуется версия v8.11)
2. Скачайте и установите git https://git-scm.com/download/win
3. Далее выполните команды (для этого запустите программу cmd или PowerShell):
```
cd ..\..\..\
git clone https://git.code.sf.net/p/tera/code wallet
npm install --global --production windows-build-tools
npm install -g node-gyp
cd wallet/Source
npm install
node set httpport:8080 password:<секретное слово без пробела>
run-node.bat
```
Если вы хотите запускать кошелек в качестве фонового процесса, то вместо последней команды (run-node.bat) выполните следующие:
```
npm install pm2 -g
pm2 start run-node.js
```
### Открытие портов (для майнинга):
```
netsh advfirewall firewall add rule name="Open 30000 port" protocol=TCP localport=30000 action=allow dir=IN
```
### Обновления
```
cd wallet
git reset --hard
git clean -f
git pull
```
## Установка на Linux
Просто введите подряд в ssh-терминал команды указанные ниже (в зависимости от версии дистрибутива)
### Дистрибутив CentOS 7:
```
sudo yum install -y git
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum install -y nodejs
sudo yum install gcc gcc-c++
sudo npm install pm2 -g
sudo git clone https://git.code.sf.net/p/tera/code wallet
cd wallet/Source
sudo npm install
sudo node set httpport:8080 password:<секретное слово без пробела>
sudo pm2 start run-node.js
```
### открытие всех портов:
```
systemctl stop firewalld
systemctl disable firewalld
```
### Дистрибутив UBUNTU 18.4:
```
sudo apt-get install -y git
sudo apt-get install -y nodejs
sudo apt-get install -y npm
sudo npm install pm2 -g
sudo git clone https://git.code.sf.net/p/tera/code wallet
sudo apt install build-essential
sudo apt group install "Development Tools"
cd wallet/Source
sudo npm install
sudo node set httpport:8080 password:<секретное слово без пробела>
sudo pm2 start run-node.js
```
### открытие портов:
```
sudo ufw allow 30000/tcp
sudo ufw allow 8080/tcp
```
### Дистрибутив UBUNTU 16 перед загрузкой ноды выполнить:
```
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
```
### Обновления
```
cd wallet
sudo git reset --hard
sudo git pull
```
## MAIN NETWORK
Значения по умолчанию:
```
port:30000
httpport:8080
```
## TEST NETWORK
Значения по умолчанию:
```
port:40000
httpport:8080
```
Запуск:
```
cp -a Source SourceTest
cd SourceTest
sudo node set-test httpport:8080 password:SecretWord
sudo pm2 start run-test.js
```
## Спецификация
* Название: TERA
* Консенсус: PoW
* Алгоритм: Terahash (sha3 + оптимизация на использование памяти)
* Максимальная эмиссия: 1 млрд (TER)
* Награда за блок: 1-20 монет, зависит от мощности сети (одна миллиардная часть от остатка нераспределенной суммы монет и умноженная на сотую часть квадрата логарифма мощности сети)
* Премайн: 5%
* Фонд разработки: 1% от майнинга
* Время генерации блока: 1 секунда
* Время подтверждения блока: 8 секунд
* Размер блока: 130 Кбайт
* Скорость: от 1000 транзакций в секунду
* Комиссия в транзакциях: бесплатно
* Криптография: sha3, secp256k1
* Защита от ДДОС: PoW (расчет хеша)
* Платформа: Node.JS
* Язык смарт-контрактов: Javascript
## КОШЕЛЕК
### Запуск кошелька
Дождитесь окончания синхронизации - должна появиться зеленая надпись Synchronization complete
Для майнинга нужно создать счет, после записи в блокчейн укажите этот номер (ID) в настройках SET MINING.
* Примечание: нужно иметь статический IP-адрес и открытый порт 30000 (его можно поменять в программе). Если вы имеете несколько нод на одном ip-адресе, то поставьте для них разные порты (30001,30002 и т.д.)
Кошелек имеет два режима ввода ключа. Приватный и публичный. Публичный нужен для работы кошелька в режиме просмотра и отправки уже подписанных транзакций (например через флешку с другого компьютера, который не подключен к сети)
## Эмиссия
Максимальная эмиссия: 1 млрд (TER)
Награда за блок: 1-20 монет, зависит от мощности сети (одна миллиардная часть от остатка нераспределенной суммы монет и умноженная на сотую часть квадрата логарифма мощности сети)
В первый год работы сети (когда номер блока находится в диапазоне от 2 млн до 30 млн) работает реферальная программа майнинга. Если майнер указал адвайзера в своем кошельке, то он получает примерно двукратный размер награды, а его адвайзер получает однократную награду. Таким образом при начале действии реферальной программы эмиссия примерно утраивается.
Технически адвайзер это номер счета, любой счет может стать адвайзером, при условии что он был создан более 1 млн блоков назад (т.е. примерно 12 дней).
В целях сглаживания кривой эмиссии, сумма награды за реферальный майнинг умножается на коэффициент, принимающий значение от 1 до 0. Коэффициент принимает значение равное 1 в начале запуска программы и плавно меняется до 0 к концу действия программы (до 30 млн-го блока).
### Пример расчета эмиссии монет:
Допустим сейчас мощность сети равняется 30 битам в хеше блока, а всего нераспределенных монет 1 млрд и мы находимся в самом начале действия программы майнинга, тогда одна награда равняется 900/100=9 монет.
Монеты распределяются следующим образом: 2 награды майнеру, 1 награда адвайзеру, а всего будет списано с системного счета 27 монет (3x9 = 27).
В случае, когда мы находимся в середине реферальной программы майнинга, когда коэффициент равен 0.5, эмиссия принимает следующие значения в приведенном выше примере: 1.5 награды майнеру, 0.5 награда адвайзеру, а всего будет списано с системного счета 18 монет (2x9 = 18).
## Описание принципа хранения монет
Монеты хранятся на счетах, по аналогии с банковскими счетами. Счета нумеруются с 0 по порядку. Нулевой номер счета имеет системный аккаунт, на который первоначально эмитировано 1 млрд монет. Для создания нового счета нужно в сеть отправить спец. транзакцию с кодом 100, в которой указывается публичный ключ владельца счета и необязательный параметр название счета (строка до 40 байт длины). Название желательно для проверки правильности ввода номера счета при отправке платежа.
Минимальный размер транзакции перевода монет со счета на счет равен 114 байтам. Такой размер получается в том случае, если указан один получатель и нет описания назначения платежа.
Транзакция в текстовом в формате JSON выглядит так:
```js
{
"Type": 110,
"Version": 2,
"Currency": 0,
"FromID": 1,
"OperationID": 40167,
"To":
[
{
"ID": 2,
"SumTER": 100,
"SumCENT": 0
}
],
"Description": "test",
"Sign": "B39C39D91136E92C5B9530ABC683D9A1AF51E27382AFC69EA3B1F14AD7C4CDBE46D36BD743F2B4AE7760F8DDE706D81FB8201ABBF27DABF6F1EC658FE432C141"
}
```
* Примечание: транзакция в примере выше имеет длину 118 байт
Version = 0 - цифровая подпись содержимого транзакции
Version = 2 - цифровая подпись содержимого транзакции + список 33 байтных публичных ключей получателей. Применяется для защиты от мутабельности аккаунтов при маленьком времени подтверждении. Например создается аккаунт и в следующий блок отправляется транзакция на перевод монет на этот счет. Потом транзакция из первого блока исчезает вследствии мутабельности блокчейн сети, в вместо нее создается другая транзакция создания счета - от неизвестной третьей стороны. В этом случае монеты не переведутся на неизвестный счет и они не будут потеряны, т.к. произойдет проверка соответствия публичного кошелька получателя требуемому значению.
Version = 3 - поддержка переводов на счета со смарт-контрактами
Текстовое представление запаковывается в бинарный формат + добавляется 12 байт POW (для защиты от ДДОС).
Назначение платежа допускается до 200 байт. Вообще размер ограничен 65535 байтами, но 200 байт это размер который видят кошельки пользователей, большую длину они обрезают.
Чем больше длина транзакции, тем больше нужно выполнить расчет POW, чтобы транзакция была конкурентоспособна и попала в блок.
При каждом изменении таблицы счетов в блокчейн записывается хеш. Это реализуется с помощью специального типа транзакций с кодом 117. Они запускаются системным DApp Accounts, который обслуживает таблицу счетов.
Транзакция имеет формат:
```js
{
"Type": 119,
"BlockNum": 1500000,
"Hash": "AB1429BC0FE5B28DB218F30D46AE9F953DC34059EA1A65A15775D73389A4EB51"
}
```
## Майнинг возможен только при наличии публичного IP
* Проверьте наличие прямого ip-адреса (закажите у провайдера)
* Проверьте проброшен ли порт от роутера до вашего компьютера
* Проверьте firewall (открыт ли порт на компьютере)
# Ссылки:
* Веб-сайт: http://terafoundation.org
* Btt: https://bitcointalk.org/index.php?topic=4573801.0
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
* Discord [RUS]: https://discord.gg/dzSGKyR
* [Ютуб-канал](https://www.youtube.com/channel/UCGQeUCUKZgH0DfbakD7gjqQ)
* [Документация по смарт-контрактам на русском](https://docs.google.com/document/d/1SkD4yc_POaGRMJRC6yGkDfdJUuKbcyq3JpG0cBXeYGM/edit?usp=sharing)
* [Руководство по созданию ордеров на Tera DEX](https://docs.google.com/document/d/1rWGOrx9gabsu866zqJ2so6Mp0WUGh9t0BIWjz4kAIBw/edit?usp=sharing)
* [Токен BTC для торговли на Tera DEX](https://docs.google.com/document/d/1ERPdSizarqYzwb5AA4R8mfUVFnSc-Amm7xCg3q4zUhA/edit?usp=sharing)
* [Ответы на вопросы про проект Тера](https://docs.google.com/document/d/1SpVuuWMYjwzk8K0oqhw5rSPFJhsV2jHManIbtRReQy8/edit?usp=sharing)
* [Техническое WP - черновик](https://docs.google.com/document/d/1B6_qlAp2xs4aHkqOwyvRMCDJTjgeNiOJiGpIeT0VAzY/edit?usp=sharing)
* [Торрент блокчейна (каталог DATA/DB)](https://sourceforge.net/p/tera/code/ci/master/tree/Torrent/Tera-folder-DB.torrent?format=raw)
* [API](https://sourceforge.net/p/tera/code/ci/master/tree/Doc/Rus/API.md)
* [CONSTANTS](https://sourceforge.net/p/tera/code/ci/master/tree/Doc/Rus/CONSTANTS.MD)
* [Презентация - Проблематика блокчейна и пути решения](https://docs.google.com/presentation/d/1NvaGQTUpeP3y7CmHpaqFmaqWlCEMMoPdvCyylFVJ3lk/edit?usp=sharing)
Топики на btt:
* [Давайте создадим идеальную криптовалюту](https://bitcointalk.org/index.php?topic=2574634.msg26224253#msg26224253)
* [Алгоритм дистрибуции монет блокчейна](https://bitcointalk.org/index.php?topic=3645579.msg36671591#msg36671591)
* [Мгновенные платежи](https://bitcointalk.org/index.php?topic=3873263.msg37478379#msg37478379)
* [Блокчейн-торговля (опираясь на теорию игр)](https://bitcointalk.org/index.php?topic=4711054.msg42534962#msg42534962)
* [Алгоритм с защитой от GPU-майнинга - TeraHash](https://bitcointalk.org/index.php?topic=5023773.msg45334091#msg45334091)
* [Смарт-контракты на javascript](https://bitcointalk.org/index.php?topic=5067286.msg47792347#msg47792347)

BIN
Pic/Tera.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Pic/Tera2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
Pic/Tera_devmode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Pic/Tera_old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
Pic/centos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
Pic/dex11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
Pic/discord.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
Pic/forum10.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
Pic/github.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
Pic/roadmap_tera_new.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
Pic/spacer_tera_new.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
Pic/telegram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Pic/terahash_v2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
Pic/twitter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
Pic/ubuntu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
Pic/windows_new_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

200
Source/HTML/CSS/buttons.css Normal file
View File

@ -0,0 +1,200 @@
/*Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons Buttons*/
/*TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader TabHeader*/
#TabHeader th
{
/*border: 1px solid black;*/
width:205px;
color: white;
background-color: #22547f;
margin: 0;
padding: 0;
height: 34px;
}
.bttab
{
background-color: black;
vertical-align: middle;
cursor: pointer;
color: white;
width: 100%;
margin: 0;
padding-top: 7px;
height: 100%;
}
/*User action*/
.btdoit
{
width: 130px;
height: 32px;
line-height: 20px;
margin: 10px;
cursor: pointer;
font-family: monospace;
}
.btdoitm
{
width: 40px;
height: 32px;
line-height: 20px;
margin: 10px;
cursor: pointer;
font-family: monospace;
}
/*All buttons*/
.bt
{
border: 1px solid black;
background: transparent;
font-weight: 400;
cursor: pointer;
}
.bt:hover,button:hover
{
filter: brightness(120%);
cursor: pointer;
}
.bt:active
{
cursor: progress;
}
.btlong
{
width: 160px;
}
.btopen
{
width: 136px;
}
.btsmall
{
width: 10px;
}
#idSendList
{
width: 800px;
border: 0 solid black;
font-weight: 700;
}
#PaiListInfo
{
width: 800px;
height:20px;
text-align: center;
}
.btinvoice
{
width: 133px;
min-width: 133px;
max-width: 133px;
height:40px;
white-space: pre-line;
background-image: url('/HTML/PIC/invoice.png');
background-repeat: no-repeat;
background-size: 16px;
}
.btinvoice_use
{
width: 110px;
min-width: 110px;
max-width: 110px;
height:62px;
}
#idCounters
{
background-image: url('/HTML/PIC/counters.png');
background-repeat: no-repeat;
background-size: 16px;
}
#idChains
{
background-image: url('/HTML/PIC/chains.png');
background-repeat: no-repeat;
background-size: 16px;
}
#idMonitor
{
background-image: url('/HTML/PIC/monitor.png');
background-repeat: no-repeat;
background-size: 16px;
}
#idConsole
{
background-image: url('/HTML/PIC/console.png');
background-repeat: no-repeat;
background-size:16px;
}
#idOpenSmart
{
background-image: url('/HTML/PIC/smart.png');
background-repeat: no-repeat;
background-size:16px;
}
#idNetwork
{
background-image: url('/HTML/PIC/network.png');
background-repeat: no-repeat;
background-size:16px;
}
#idDown
{
background-image: url('/HTML/PIC/down.png');
background-repeat: no-repeat;
background-size: 16px;
background-position: right;
}
#idUp
{
background-image: url('/HTML/PIC/up.png');
background-repeat: no-repeat;
background-size: 16px;
background-position: right;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(82, 168, 236, 1);
}
.btexlporer
{
width: 136px;
}
input[type="checkbox"]
{
vertical-align: middle;
}

90
Source/HTML/CSS/codes.css Normal file
View File

@ -0,0 +1,90 @@
/*
Google Code style (c) Aahan Krish <geekpanth3r@gmail.com>
Some correct by vtools
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #eff5eb;
color: black;
}
.hljs-comment,
.hljs-quote {
color: #800;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-section,
.hljs-title,
.hljs-name {
color: #008;
}
.hljs-variable,
.hljs-template-variable {
color: #660;
}
.hljs-string,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-regexp {
color: #080;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-meta,
.hljs-number,
.hljs-link {
color: #066;
}
.hljs-title,
.hljs-doctag,
.hljs-type,
.hljs-attr,
.hljs-built_in,
.hljs-builtin-name,
.hljs-params {
color: #606;
}
.hljs-attribute,
.hljs-subst {
color: #000;
}
.hljs-formula {
background-color: #eee;
font-style: italic;
}
.hljs-selector-id,
.hljs-selector-class {
color: #9B703F
}
.hljs-addition {
background-color: #baeeba;
}
.hljs-deletion {
background-color: #ffc8bd;
}
.hljs-doctag,
.hljs-strong {
font-weight: bold;
}
.hljs-emphasis {
font-style: italic;
}

172
Source/HTML/CSS/style.css Normal file
View File

@ -0,0 +1,172 @@
/*STYLE STYLE STYLE*/
/*STYLE STYLE STYLE*/
/*STYLE STYLE STYLE*/
/*STYLE STYLE STYLE*/
body
{
font-family: Arial, sans-serif;
font-size: 15px;
font-weight: 300;
}
body.styleBrown
{
--color0:#503F13;
--color1:#86754A;
--color2:#F5E5BB;
--color3:#F5F0E3;
}
body.styleGreen
{
--color0:#204410;
--color1:#4F7340;
--color2:#CBF4BA;
--color3:#E7F4E1;
}
body.styleBlue
{
--color0:#0D1B35;
--color1:#354259;
--color2:#BED0F2;
--color3:#E1E7F2;
}
body.styleGray
{
--color0:#424a5D;
--color1:#5b6775;
--color2:#FFFFFF;
--color3:#f3f3f4;
}
body.styleContrast1
{
--color0:#101010;
--color1:#303030;
--color2: #b3cee8;
--color3:#FFFFFF;
}
body.styleContrast2
{
--color0:#101010;
--color1:#303030;
--color2: #cee8df;
--color3:#FFFFFF;
}
body.styleContrast3
{
--color0:#101010;
--color1:#303030;
--color2: #e8e0d4;
--color3:#FFFFFF;
}
body.univers .bt
{
background: var(--color1);
color: var(--color2);
}
body.univers
{
background: var(--color2);
}
body.univers table.grid
{
background:var(--color3);
}
body.univers .bttab
{
background: var(--color1);
color:white;
}
body.univers .current
{
background: var(--color0);
color:white;
}
body.univers input,textarea,select
{
background:white;
color: black;
}
/*dark*/
body.styleDark
{
background: #282828;
color: white;
}
body.styleDark .bt
{
background: #4c4c4c;
color: white;
border: 1px solid #5a5a5a;
}
body.styleDark .header_tr
{
color:white;
}
body.styleDark table.grid
{
background: #565656;
}
body.styleDark .bttab
{
background: #202225;
color:white;
}
body.styleDark .current
{
background: #565b61;
color:white;
}
body.styleDark input,textarea,select
{
background:white;
color: black;
}
/*bt*/
body.styleDark button
{
background: #939393;
border: 1px solid #282828;
color: white;
}
body.styleDark .bold
{
font-weight: 300;
}
body.styleDark #idStatus
{
color: #fffabd;
}
body.styleDark #idOpenWallet
{
border: 1px solid darkgrey;
}

514
Source/HTML/CSS/wallet.css Normal file
View File

@ -0,0 +1,514 @@

/*Списки*/
table
{
border-collapse: collapse;
width:100%;
max-width: 800px
}
.grid th, .grid td
{
border: 1px solid #264378;
padding: 4px;
}
.grid td
{
width: 60px;
vertical-align:top;
}
.bold
{
font-weight: 700;
}
.smallbold
{
font-weight: 600;
}
td.sum
{
text-align: right;
width: 120px;
}
td.num
{
text-align: right;
width: 50px;
}
td.cur
{
text-align: left;
width: 50px;
font-size:smaller;
}
td.snum
{
text-align: center;
width: 20px;
}
td.direct
{
text-align: center;
vertical-align: middle;
width: 10px;
font-weight: 700;
font-size:x-large;
}
td.smart
{
text-align: right;
width: 150px;
max-width: 200px;
}
td.txt
{
text-align: left;
width: 100px;
}
td.desc
{
text-align: left;
width: 200px;
max-width: 200px;
word-break: break-all;
}
td.name
{
text-align: left;
width: 100px;
}
td.date
{
text-align: left;
width: 90px;
font-size: small;
}
/*SEND SEND SEND SEND SEND SEND SEND SEND SEND SEND */
table.form_input
{
border-collapse: collapse;
width: 600px;
}
.form_input td
{
width: 20%;
}
.form_input td:nth-child(2)
{
width: 80%;
}
.form_input input, .form_input select
{
width: 98%;
text-align: right;
}
.form_input textarea
{
width: 98%;
text-align: left;
}
.form_input .bsend
{
width: 33%;
height: 30px;
text-align: center;
float: left;
}
.short_input input
{
width: 120px;
}
td.code
{
width: 240px;
font-family: "courier new", "times new roman", monospace;
font-size: small;
align-content: left;
text-align: left;
word-break: break-all;
}
td.code2
{
width: 340px;
font-family: "courier new", "times new roman", monospace;
font-size: small;
align-content: left;
text-align: left;
word-break: break-all;
}
.hash
{
width: 270px;
font-family: "courier new", "times new roman", monospace;
font-size: 60%;
align-content: left;
text-align: left;
word-break: break-all;
}
.pubkey
{
width: 180px;
font-family: "courier new", "times new roman", monospace;
font-size: 75%;
align-content: left;
text-align: left;
word-break: break-all;
}
.accname
{
width: 180px;
font-family: Cambria,sans-serif;
align-content: left;
text-align: left;
word-break: break-all;
}
.verify
{
}
/*CHECKBOX*/
.checkbox
{
position: absolute;
z-index: -1;
opacity: 0;
margin: 10px 0 0 20px;
}
.checkbox + label
{
position: relative;
padding: 0 20px 0 55px;
cursor: pointer;
}
.checkbox + label:before
{
content: '';
position: absolute;
top: -4px;
left: 0;
width: 50px;
height: 26px;
border-radius: 13px;
background: #CDD1DA;
box-shadow: inset 0 2px 3px rgba(0,0,0,.2);
transition: .2s;
}
.checkbox + label:after
{
content: '';
position: absolute;
top: -2px;
left: 2px;
width: 22px;
height: 22px;
border-radius: 10px;
background: #FFF;
box-shadow: 0 2px 5px rgba(0,0,0,.3);
transition: .2s;
}
.checkbox:checked + label:before
{
background: #46b319;
}
.checkbox_red:checked + label:before
{
background: darkred;
}
.checkbox_alert + label:before
{
background: #f0b323;
}
.checkbox:checked + label:after
{
left: 26px;
}
.checkbox:focus + label:before
{
box-shadow: inset 0 2px 3px rgba(0,0,0,.2), 0 0 0 3px rgba(217, 217, 217, 0.7);
}
#idPercentMining
{
width: 40px;
text-align: center;
display:inline-block;
}
#idNodeWhiteList
{
width: 780px;
}
#idTotalSum
{
text-align: left;
}
/*CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG*/
/*Просмотр ключей*/
table.keys
{
border-collapse: collapse;
width: 800px;
}
/*Редактирование приватного ключа*/
#grid_edit_key .bt
{
width: 80px;
height: 30px;
line-height: 20px;
margin: 10px;
text-align: center;
}
#idTypeKey,#idShortNameText
{
width: 250px;
height: 20px;
text-align: left;
}
/*Редактирование new acc Name*/
#grid_edit_newacc .bt, #grid_mining_set .bt, #idTablePassword1 .bt, #idTablePassword2 .bt
{
width: 80px;
height: 30px;
line-height: 20px;
margin: 10px;
text-align: center;
}
#idAutoSetMining
{
width: 16px;
height: 16px;
text-align: left;
top: 3px;
position:relative;
}
#grid_accounts_all, #grid_history
{
font-size: smaller;
}
#grid_history .red td
{
color: darkred;
}
#grid_history .blue td
{
color: darkblue;
}
#grid_history .green td
{
color: darkgreen;
}
/*idStatus Log operations*/
#idStatus
{
z-index:1000;
position:relative;
top:40px;
left:10px;
text-align: left;
width:800px; /* ширина блока */
color:blue;
}
#idServerLog
{
width:100%;
max-width: 800px;
text-align: left;
border: 1px solid black;
height: 220px;
padding: 1px;
margin: 0px;
font-family: "courier new", "times new roman", monospace;
font-size: 80%;
align-content: left;
word-break: break-all;
}
#idTransaction
{
width:100%;
min-width: 795px;
max-width: 795px;
text-align: left;
color:#204410;
}
#idDescription
{
width: 95%;
min-width: 560px;
max-width: 560px;
}
#idAccount
{
width: 100%;
text-align: left;
align-content: left;
}
#idTo
{
width: 99%;
text-align: left;
align-content: left;
}
#idSumSend
{
background-color: #f0ffb9;
font-weight: 700;
width: 75%;
}
#view_header
{
width: 800px;
font-weight: 600;
color: black;
text-align: center;
}
.header_tr
{
width: 600px;
font-weight: 600;
text-align: center;
color:black;
}
#idPaginationHistory, #idPaginationBlock, #idPaginationAccount, #idPaginationAct, #idPaginationHash, #idUtilView, #idPaginationDapps
{
width: 800px;
align-content: center;
text-align: center;
}
#MAIN
{
align-content: left;
}
#idStableScroll
{
z-index:0;
position:absolute;
top:800px;
height: 10px;
color: darkred;
width: 97%;
margin: auto;
}
#idBlockOnSend
{
z-index:100;
position:absolute;
height:150px;
width:380px;
top:20%;
left:0;
transform: translateX(50vw) translateX(-190px);
font-size: larger;
padding: 10px;
background: #2b372d;
color: white;
text-align: left;
border: 1px solid gray;
box-shadow: 0 0 0 2px darkgrey;
border-radius: 8px;
}
.radius
{
border-radius: 4px;
max-height: 34px;
height: 34px;
}
button.radius
{
color:white;
background-color: #337ab7;
border-color: #2e6da4;
width: 100px;
margin: 20px;
}
.bt_open_dapp
{
min-width: 160px;
max-width: 160px;
height: 40px;
min-height: 40px;
vertical-align:middle;
margin: 0;
}
.setsmart
{
color:saddlebrown;
margin: 0;
}

View File

@ -0,0 +1,32 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
const ipcRenderer = require('electron').ipcRenderer;
function GetDataElectron(Method,ObjPost,Func)
{
if(Func === undefined)
{
Func = ObjPost;
ObjPost = null;
}
var reply;
try
{
reply = ipcRenderer.sendSync('GetData', {path:Method, obj:ObjPost});
}
catch(e)
{
reply = undefined;
}
if(Func)
Func(reply);
};
window.GetData = GetDataElectron;

1623
Source/HTML/JS/client.js Normal file

File diff suppressed because it is too large Load Diff

101
Source/HTML/JS/coinlib.js Normal file
View File

@ -0,0 +1,101 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var MAX_SUM_TER = 1e9;
var MAX_SUM_CENT = 1e9;
function ADD(Coin,Value2)
{
Coin.SumCOIN += Value2.SumCOIN;
Coin.SumCENT += Value2.SumCENT;
if(Coin.SumCENT >= MAX_SUM_CENT)
{
Coin.SumCENT -= MAX_SUM_CENT;
Coin.SumCOIN++;
}
return true;
};
function SUB(Coin,Value2)
{
Coin.SumCOIN -= Value2.SumCOIN;
if(Coin.SumCENT >= Value2.SumCENT)
{
Coin.SumCENT -= Value2.SumCENT;
}
else
{
Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT;
Coin.SumCOIN--;
}
if(Coin.SumCOIN < 0)
{
return false;
}
return true;
};
function DIV(Coin,Value)
{
Coin.SumCOIN = Coin.SumCOIN / Value;
Coin.SumCENT = Math.floor(Coin.SumCENT / Value);
var SumCOIN = Math.floor(Coin.SumCOIN);
var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT);
Coin.SumCOIN = SumCOIN;
Coin.SumCENT = Coin.SumCENT + SumCENT;
if(Coin.SumCENT >= MAX_SUM_CENT)
{
Coin.SumCENT -= MAX_SUM_CENT;
Coin.SumCOIN++;
}
return true;
};
function FLOAT_FROM_COIN(Coin)
{
var Sum = Coin.SumCOIN + Coin.SumCENT / 1e9;
return Sum;
};
function COIN_FROM_FLOAT(Sum)
{
var SumCOIN = Math.floor(Sum);
var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
var Sum2 = FLOAT_FROM_COIN(Coin);
if(Sum2 !== Sum2)
{
throw "ERR CHECK COIN_FROM_FLOAT";
}
return Coin;
};
function ISZERO(Coin)
{
if(Coin.SumCOIN === 0 && Coin.SumCENT === 0)
return true;
else
return false;
};
function COIN_FROM_STRING(Str)
{
throw "TODO: COIN_FROM_STRING";
};
if(typeof global === "object")
{
global.ADD = ADD;
global.SUB = SUB;
global.DIV = DIV;
global.ISZERO = ISZERO;
global.FLOAT_FROM_COIN = FLOAT_FROM_COIN;
global.COIN_FROM_FLOAT = COIN_FROM_FLOAT;
global.COIN_FROM_STRING = COIN_FROM_STRING;
}

View File

@ -0,0 +1,364 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var MAX_SUPER_VALUE_POW = (1 << 30) * 2;
window.TYPE_TRANSACTION_CREATE = 100;
function GetHashWithValues(hash0,value1,value2,bNotCopy)
{
var hash;
if(bNotCopy)
hash = hash0;
else
hash = hash0.slice();
hash[0] = value1 & 0xFF;
hash[1] = (value1 >>> 8) & 0xFF;
hash[2] = (value1 >>> 16) & 0xFF;
hash[3] = (value1 >>> 24) & 0xFF;
hash[4] = value2 & 0xFF;
hash[5] = (value2 >>> 8) & 0xFF;
hash[6] = (value2 >>> 16) & 0xFF;
hash[7] = (value2 >>> 24) & 0xFF;
var arrhash = shaarr(hash);
return arrhash;
};
function GetPowPower(arrhash)
{
var SumBit = 0;
for(var i = 0; i < arrhash.length; i++)
{
var CurSum = Math.clz32(arrhash[i]) - 24;
SumBit += CurSum;
if(CurSum !== 8)
break;
}
return SumBit;
};
function GetPowValue(arrhash)
{
var value = (arrhash[0] << 23) * 2 + (arrhash[1] << 16) + (arrhash[2] << 8) + arrhash[3];
value = value * 256 + arrhash[4];
value = value * 256 + arrhash[5];
return value;
};
function CreateNoncePOWExtern(arr0,BlockNum,count,startnone)
{
var arr = [];
for(var i = 0; i < arr0.length; i++)
arr[i] = arr0[i];
if(!startnone)
startnone = 0;
var maxnonce = 0;
var supervalue = MAX_SUPER_VALUE_POW;
for(var nonce = startnone; nonce <= startnone + count; nonce++)
{
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
var value = GetPowValue(arrhash);
if(value < supervalue)
{
maxnonce = nonce;
supervalue = value;
}
}
return maxnonce;
};
window.TR_TICKET_HASH_LENGTH = 10;
function CreateHashBody(body,Num,Nonce)
{
var length = body.length - 12;
body[length + 0] = Num & 0xFF;
body[length + 1] = (Num >>> 8) & 0xFF;
body[length + 2] = (Num >>> 16) & 0xFF;
body[length + 3] = (Num >>> 24) & 0xFF;
body[length + 4] = 0;
body[length + 5] = 0;
length = body.length - 6;
body[length + 0] = Nonce & 0xFF;
body[length + 1] = (Nonce >>> 8) & 0xFF;
body[length + 2] = (Nonce >>> 16) & 0xFF;
body[length + 3] = (Nonce >>> 24) & 0xFF;
body[length + 4] = 0;
body[length + 5] = 0;
var HASH = sha3(body);
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
FullHashTicket[i] = HASH[i];
WriteUintToArrOnPos(FullHashTicket, Num, TR_TICKET_HASH_LENGTH);
return sha3(FullHashTicket);
};
window.DELTA_POWER_POW_TR = 0;
window.DELTA_FOR_TIME_TX = 0;
window.MIN_POWER_POW_TR = 0;
window.MIN_POWER_POW_ACC_CREATE = 0;
window.CONSENSUS_PERIOD_TIME = 1000;
window.FIRST_TIME_BLOCK = 1530446400000;
window.SetBlockChainConstant = function (Data)
{
var DeltaServerClient = new Date() - Data.CurTime;
if(!Data.DELTA_CURRENT_TIME)
Data.DELTA_CURRENT_TIME = 0;
window.DELTA_CURRENT_TIME2 = Data.DELTA_CURRENT_TIME - DeltaServerClient;
window.MIN_POWER_POW_TR = DELTA_POWER_POW_TR + Data.MIN_POWER_POW_TR;
window.MIN_POWER_POW_ACC_CREATE = Data.MIN_POWER_POW_ACC_CREATE + 3;
window.FIRST_TIME_BLOCK = Data.FIRST_TIME_BLOCK;
window.CONSENSUS_PERIOD_TIME = Data.CONSENSUS_PERIOD_TIME;
window.GetCurrentBlockNumByTime = function ()
{
var CurrentTime = Date.now() + DELTA_CURRENT_TIME2;
var CurTimeNum = CurrentTime - FIRST_TIME_BLOCK;
var StartBlockNum = Math.floor((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME);
return StartBlockNum;
};
window.NWMODE = Data.NWMODE;
};
window.GetCurrentBlockNumByTime = function ()
{
return 0;
};
function GetBlockNumTr(arr)
{
var BlockNum = window.DELTA_FOR_TIME_TX + GetCurrentBlockNumByTime();
if(arr[0] === TYPE_TRANSACTION_CREATE)
{
var BlockNum2 = Math.floor(BlockNum / 10) * 10;
if(BlockNum2 < BlockNum)
BlockNum2 = BlockNum2 + 10;
BlockNum = BlockNum2;
}
return BlockNum;
};
var LastCreatePOWTrType = 0;
var LastCreatePOWBlockNum = 0;
var LastCreatePOWHash = [255, 255, 255, 255];
function CreateHashBodyPOWInnerMinPower(arr,MinPow)
{
var TrType = arr[0];
var BlockNum = GetBlockNumTr(arr);
if(MinPow === undefined)
{
MinPow = MIN_POWER_POW_TR + Math.log2(arr.length / 128);
}
var nonce = 0;
while(1)
{
var arrhash = CreateHashBody(arr, BlockNum, nonce);
var power = GetPowPower(arrhash);
if(power >= MinPow)
{
if(LastCreatePOWBlockNum === BlockNum && LastCreatePOWTrType === TrType && CompareArr(LastCreatePOWHash, arrhash) > 0)
{
}
else
{
LastCreatePOWBlockNum = BlockNum;
LastCreatePOWTrType = TrType;
LastCreatePOWHash = arrhash;
return nonce;
}
}
nonce++;
if(nonce % 2000 === 0)
{
BlockNum = GetBlockNumTr(arr);
}
}
};
function CalcHashFromArray(ArrHashes,bOriginalSeq)
{
if(bOriginalSeq === undefined)
ArrHashes.sort(CompareArr);
var Buf = [];
for(var i = 0; i < ArrHashes.length; i++)
{
var Value = ArrHashes[i];
for(var n = 0; n < Value.length; n++)
Buf.push(Value[n]);
}
if(Buf.length === 0)
return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
else
if(Buf.length === 32)
return Buf;
var Hash = shaarr(Buf);
return Hash;
};
function GetArrFromValue(Num)
{
var arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
arr[0] = Num & 0xFF;
arr[1] = (Num >>> 8) & 0xFF;
arr[2] = (Num >>> 16) & 0xFF;
arr[3] = (Num >>> 24) & 0xFF;
var NumH = Math.floor(Num / 4294967296);
arr[4] = NumH & 0xFF;
arr[5] = (NumH >>> 8) & 0xFF;
return arr;
};
function LoadLib(Path)
{
var item = document.createElement('script');
item.type = "text/javascript";
item.src = Path;
document.getElementsByTagName('head')[0].appendChild(item);
};
function IsMS()
{
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if(msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))
{
return 1;
}
else
{
return 0;
}
};
function LoadSignLib()
{
if(window.SignLib)
return ;
LoadLib("./JS/sign-lib-min.js");
};
function ComputeSecretWithCheck(PubKey,StrPrivKey,F)
{
if(!window.SignLib)
{
SetError("Error - SignLib not installed");
return ;
}
if(!IsHexStr(StrPrivKey) || StrPrivKey.length !== 64)
{
SetError("Error set PrivKey");
return ;
}
var PrivKey = Buffer.from(GetArrFromHex(StrPrivKey));
if(typeof PubKey === "string")
{
if(!IsHexStr(PubKey) || PubKey.length !== 66)
{
SetError("Error PubKey");
return ;
}
PubKey = Buffer.from(GetArrFromHex(PubKey));
}
var Result = SignLib.ecdh(PubKey, PrivKey);
F(sha3(Result));
};
function ComputeSecret(PubKey,F)
{
if(localStorage["idPrivKey"])
{
ComputeSecretWithCheck(PubKey, localStorage["idPrivKey"], F);
}
else
{
GetData("GetWalletInfo", {}, function (Data)
{
if(!Data || !Data.result)
return ;
ComputeSecretWithCheck(PubKey, Data.PrivateKey, F);
});
}
};
function Encrypt(ArrSecret,StartEncrypt,StrName,StrValue)
{
var arrRnd = sha3arr2(ArrSecret, sha3(StrName + StartEncrypt));
var Arr = toUTF8Array(StrValue);
return DoSecret(Arr, arrRnd);
};
function Decrypt(ArrSecret,StartEncrypt,StrName,Arr)
{
if(!ArrSecret)
return "".padEnd(Arr.length / 2, ".");
if(typeof Arr === "string")
Arr = GetArrFromHex(Arr);
var arrRnd = sha3arr2(ArrSecret, sha3(StrName + StartEncrypt));
var Arr2 = DoSecret(Arr, arrRnd);
var Str = Utf8ArrayToStr(Arr2);
return Str;
};
function DoSecret(Arr,arrRnd)
{
var Arr2 = [];
var CryptID = 0;
var Pos = 0;
while(Pos < Arr.length)
{
CryptID++;
WriteUintToArrOnPos(arrRnd, CryptID, 0);
var CurBuf = sha3(arrRnd);
for(var i = 0; i < 32 && Pos < Arr.length; i++, Pos++)
{
Arr2[Pos] = Arr[Pos] ^ CurBuf[i];
}
}
return Arr2;
};
var glEncryptInit = 0;
function EncryptInit()
{
glEncryptInit++;
var Time = Date.now() - new Date(2019, 0, 1);
return Math.floor(Time * 100 + Math.random() * 100) * 100 + glEncryptInit;
};
function EncryptID(ArrSecret,StartEncrypt,id)
{
var Value = $(id).value;
Value = Value.padEnd(Value.length + random(5), " ");
return GetHexFromArr(Encrypt(ArrSecret, StartEncrypt, id, Value));
};
function EncryptFields(ArrSecret,Params,ArrName)
{
if(!Params.Crypto)
Params.Crypto = EncryptInit();
for(var i = 0; i < ArrName.length; i++)
{
var Name = ArrName[i];
var Value = Params[Name];
Value = Value.padEnd(Value.length + random(5), " ");
Params[Name] = GetHexFromArr(Encrypt(ArrSecret, Params.Crypto, Name, Value));
}
};
function DecryptFields(ArrSecret,Params,ArrName)
{
for(var i = 0; i < ArrName.length; i++)
{
var Name = ArrName[i];
if(Params[Name])
{
Params[Name] = Decrypt(ArrSecret, Params.Crypto, Name, GetArrFromHex(Params[Name]));
}
else
{
Params[Name] = "";
}
}
};

View File

@ -0,0 +1,503 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
function SendPay(Data)
{
Data.cmd = "pay";
SendData(Data);
};
function SetStorage(Key,Value)
{
var Data = {cmd:"setstorage", Key:Key, Value:Value};
SendData(Data);
};
function GetStorage(Key,F)
{
var Data = {cmd:"getstorage", Key:Key};
SendData(Data, F);
};
function SetCommon(Key,Value)
{
var Data = {cmd:"setcommon", Key:Key, Value:Value};
SendData(Data);
};
function GetCommon(Key,F)
{
var Data = {cmd:"getcommon", Key:Key};
SendData(Data, F);
};
function GetInfo(F)
{
var Data = {cmd:"DappInfo", AllAccounts:ALL_ACCOUNTS};
SendData(Data, F);
};
function Call(Account,MethodName,Params,F)
{
var Data = {cmd:"DappCall", MethodName:MethodName, Params:Params, Account:Account};
SendData(Data, F);
};
function SendCall(Account,MethodName,Params,FromNum)
{
if(!INFO.WalletCanSign)
{
SetError("Pls, open wallet");
return 0;
}
var Data = {cmd:"DappSendCall", MethodName:MethodName, Params:Params, Account:Account, FromNum:FromNum};
SendData(Data);
return 1;
};
function GetWalletAccounts(F)
{
var Data = {cmd:"DappWalletList"};
SendData(Data, F);
};
function GetAccountList(Params,F)
{
var Data = {cmd:"DappAccountList", Params:Params};
SendData(Data, F);
};
function GetSmartList(Params,F)
{
var Data = {cmd:"DappSmartList", Params:Params};
SendData(Data, F);
};
function GetBlockList(Params,F)
{
var Data = {cmd:"DappBlockList", Params:Params};
SendData(Data, F);
};
function GetTransactionList(Params,F)
{
var Data = {cmd:"DappTransactionList", Params:Params};
SendData(Data, F);
};
function DappSmartHTMLFile(Smart,F)
{
var Data = {cmd:"DappSmartHTMLFile", Params:{Smart:Smart}};
SendData(Data, F);
};
function DappBlockFile(BlockNum,TrNum,F)
{
var Data = {cmd:"DappBlockFile", Params:{BlockNum:BlockNum, TrNum:TrNum}};
SendData(Data, F);
};
function SetStatus(Str)
{
SendData({cmd:"SetStatus", Message:Str});
};
function SetError(Str)
{
SendData({cmd:"SetError", Message:Str});
};
function SetLocationPath(Str)
{
SendData({cmd:"SetLocationHash", Message:Str});
};
function OpenLink(Str)
{
SendData({cmd:"OpenLink", Message:Str});
};
function ComputeSecret(PubKey,F)
{
if(!INFO.WalletCanSign)
{
SetError("Pls, open wallet");
return 0;
}
if(typeof PubKey === "number")
{
var AccNum = PubKey;
GetAccountList({StartNum:AccNum, CountNum:1}, function (Err,Arr)
{
if(Err)
{
SetError(Err);
}
else
{
SendData({cmd:"ComputeSecret", PubKey:Arr[0].PubKey.data}, F);
}
});
}
else
{
SendData({cmd:"ComputeSecret", PubKey:PubKey}, F);
}
};
function CheckInstall()
{
SendData({cmd:"CheckInstall"});
};
function SendTransaction(Body,TR,SumPow,F)
{
SetError("Cannt SEND TR: " + JSON.stringify(TR));
};
function CurrencyName(Num)
{
var Name = MapCurrency[Num];
if(!Name)
{
GetSmartList({StartNum:Num, CountNum:1, TokenGenerate:1}, function (Err,Arr)
{
if(Err || Arr.length === 0)
return ;
var Smart = Arr[0];
Name = GetTokenName(Smart.Num, Smart.ShortName);
MapCurrency[Smart.Num] = Name;
});
Name = GetTokenName(Num, "");
}
return Name;
};
var SendCountUpdate = 0;
function FindAllCurrency()
{
SendCountUpdate++;
GetSmartList({StartNum:8, CountNum:100, TokenGenerate:1}, function (Err,Arr)
{
SendCountUpdate--;
if(Err)
return ;
for(var i = 0; i < Arr.length; i++)
{
var Smart = Arr[i];
if(!MapCurrency[Smart.Num])
{
var Name = GetTokenName(Smart.Num, Smart.ShortName);
MapCurrency[Smart.Num] = Name;
}
}
});
};
function GetFilePath(Path)
{
if(window.PROTOCOL_SERVER_PATH && Path.indexOf("file/"))
{
if(Path.substr(0, 1) !== "/")
Path = "/" + Path;
Path = window.PROTOCOL_SERVER_PATH + Path;
}
return Path;
};
function GetParamsFromPath(Name)
{
if(!OPEN_PATH)
return undefined;
var arr = OPEN_PATH.split("&");
for(var i = 0; i < arr.length; i++)
{
if(arr[i].indexOf(Name + "=") === 0)
{
return arr[i].split("=")[1];
}
}
};
function GetState(AccNum,F,FErr)
{
SendCountUpdate++;
GetAccountList({StartNum:AccNum, CountNum:1}, function (Err,Arr)
{
SendCountUpdate--;
if(!Err && Arr.length)
{
var Item = Arr[0].SmartState;
if(Item)
{
F(Item);
return ;
}
}
if(FErr)
{
FErr();
return ;
}
});
};
var glMapF = {};
var glKeyF = 0;
function SendData(Data,F)
{
if(!window.parent)
return ;
if(F)
{
glKeyF++;
Data.CallID = glKeyF;
glMapF[glKeyF] = F;
}
window.parent.postMessage(Data, "*");
};
function OnMessage(event)
{
var Data = event.data;
if(!Data || typeof Data !== "object")
return ;
var CallID = Data.CallID;
var cmd = Data.cmd;
if(CallID)
{
var F = glMapF[CallID];
if(F)
{
delete Data.CallID;
delete Data.cmd;
switch(cmd)
{
case "getstorage":
case "getcommon":
F(Data.Key, Data.Value);
break;
case "DappCall":
F(Data.Err, Data.RetValue);
break;
case "DappInfo":
F(Data.Err, Data);
break;
case "DappWalletList":
case "DappAccountList":
case "DappSmartList":
case "DappBlockList":
case "DappTransactionList":
F(Data.Err, Data.arr);
break;
case "DappBlockFile":
case "DappSmartHTMLFile":
F(Data.Err, Data.Body);
break;
case "ComputeSecret":
F(Data.Result);
break;
default:
console.log("Error cmd: " + cmd);
}
delete glMapF[CallID];
}
}
else
{
switch(cmd)
{
case "History":
var eventEvent = new CustomEvent("History", {detail:Data});
window.dispatchEvent(eventEvent);
break;
case "OnEvent":
if(window.OnEvent)
{
window.OnEvent(Data);
}
var eventEvent = new CustomEvent("Event", {detail:Data});
window.dispatchEvent(eventEvent);
}
}
};
function OpenRefFile(Str)
{
var Param = ParseFileName(Str);
if(Param.BlockNum)
DappBlockFile(Param.BlockNum, Param.TrNum, function (Err,Body)
{
document.write(Body);
});
else
{
OpenLink(Str);
}
};
function SaveToStorageByArr(Arr)
{
SetStorage("VerSave", "1");
for(var i = 0; i < Arr.length; i++)
{
var name = Arr[i];
var Item = $(name);
if(Item.type === "checkbox")
SetStorage(name, 0 + Item.checked);
else
SetStorage(name, Item.value);
}
};
function LoadFromStorageByArr(Arr,F,bAll)
{
GetStorage("VerSave", function (Key,Value)
{
if(Value === "1")
{
for(var i = 0; i < Arr.length; i++)
{
if(i === Arr.length - 1)
LoadFromStorageById(Arr[i], F);
else
LoadFromStorageById(Arr[i]);
}
}
if(bAll && F)
F(0);
});
};
function LoadFromStorageById(Name,F)
{
GetStorage(Name, function (Key,Value)
{
var Item = document.getElementById(Name);
if(Item.type === "checkbox")
Item.checked = parseInt(Value);
else
Item.value = Value;
if(F)
F(Key, Value);
});
};
var SendCountDappParams = 0;
function GetDappParams(BNum,TrNum,F,bAll)
{
if(!BNum)
{
if(bAll)
F();
return ;
}
SendCountDappParams++;
DappBlockFile(BNum, TrNum, function (Err,Data)
{
SendCountDappParams--;
if(!Err && Data.Type === 135)
{
try
{
var Params = JSON.parse(Data.Params);
}
catch(e)
{
}
if(Params)
{
F(Params, Data.MethodName, Data.FromNum);
return ;
}
}
if(bAll)
F();
});
};
document.addEventListener("DOMContentLoaded", function ()
{
var refs = document.getElementsByTagName("A");
for(var i = 0, L = refs.length; i < L; i++)
{
if(refs[i].href.indexOf("/file/") >= 0)
{
refs[i].onclick = function ()
{
OpenRefFile(this.href);
};
}
}
});
if(window.addEventListener)
{
window.addEventListener("message", OnMessage);
}
else
{
window.attachEvent("onmessage", OnMessage);
}
var SMART = {}, BASE_ACCOUNT = {}, INFO = {}, USER_ACCOUNT = [], USER_ACCOUNT_MAP = {}, OPEN_PATH = "", ACCOUNT_OPEN_NUM = 0;
var ALL_ACCOUNTS = 0;
var WasStartInit = 0, WasStartInit2 = 0;
var eventInfo = new Event("UpdateInfo");
function UpdateDappInfo()
{
GetInfo(function (Err,Data)
{
if(Err)
{
return ;
}
INFO = Data;
SMART = Data.Smart;
BASE_ACCOUNT = Data.Account;
OPEN_PATH = Data.OPEN_PATH;
ACCOUNT_OPEN_NUM = ParseNum(OPEN_PATH);
SetBlockChainConstant(Data);
USER_ACCOUNT = Data.ArrWallet;
USER_ACCOUNT_MAP = {};
for(var i = 0; i < USER_ACCOUNT.length; i++)
USER_ACCOUNT_MAP[USER_ACCOUNT[i].Num] = USER_ACCOUNT[i];
if(window.OnInit && !WasStartInit)
{
WasStartInit = 1;
window.OnInit(1);
}
else
if(window.OnUpdateInfo)
{
window.OnUpdateInfo();
}
if(!WasStartInit2)
{
WasStartInit2 = 1;
var eventInit = new Event("Init");
window.dispatchEvent(eventInit);
}
window.dispatchEvent(eventInfo);
if(Data.ArrEvent)
for(var i = 0; i < Data.ArrEvent.length; i++)
{
var Item = Data.ArrEvent[i];
Item.cmd = "OnEvent";
OnMessage({data:Item});
}
});
};
window.addEventListener('load', function ()
{
if(!window.sha3)
LoadLib("./JS/sha3.js");
UpdateDappInfo();
setInterval(UpdateDappInfo, 1000);
});

393
Source/HTML/JS/diagram.js Normal file
View File

@ -0,0 +1,393 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var DiagramMap = {};
var DiagramMapId = {};
var LMouseOn = false;
function SetHTMLDiagramItem(Item,width)
{
Item.mouseX = width - 50;
if(Item.Extern || Item.Delete)
return ;
var MinHeight = 80;
if(!Item.id)
Item.id = "DgrmId" + Item.num;
DiagramMap[Item.name] = Item;
DiagramMapId[Item.id] = Item;
if(Item.isLine)
{
if(Item.text)
Str = "<BR><B>" + Item.text + '</B><INPUT type="button" class="delete" onclick="DeleteDiagram(\'' + Item.id + '\')" value="X">';
else
Str = "<HR>";
}
else
{
Str = '<BR><DIV>' + Item.text + '<INPUT type="button" class="delete" onclick="DeleteDiagram(\'' + Item.id + '\')" value="X"></DIV>\
<BR><canvas class="DIAGRAM" width="' + width + '" height="' + MinHeight + '" id="' + Item.id + '"></canvas>';
}
var ElBlock = document.getElementById("B" + Item.id);
if(ElBlock)
ElBlock.innerHTML = Str;
else
{
var diargams = document.getElementById("diargams");
diargams.innerHTML += "<DIV id='B" + Item.id + "'>" + Str + "</DIV>";
}
};
function SetDiagramMouseX(event,mode)
{
if(event.srcElement && event.srcElement.className && event.srcElement.className.indexOf && event.srcElement.className.indexOf("DIAGRAM") >= 0)
{
if(mode === "down")
LMouseOn = true;
else
if(mode === "up")
LMouseOn = false;
event.preventDefault();
if(LMouseOn === true)
{
var obj = event.srcElement;
var mouse = getMouse(obj, event);
if(event.ctrlKey === true)
{
for(var key in DiagramMapId)
{
var Item = DiagramMapId[key];
Item.mouseX = mouse.x;
DrawDiagram(Item);
}
}
else
{
var Item = DiagramMapId[obj.id];
if(Item)
{
Item.mouseX = mouse.x;
DrawDiagram(Item);
}
}
}
}
};
function DrawDiagram(Item)
{
if(Item.Delete)
return ;
var arr = Item.arr;
if(!arr)
arr = Item.ArrList;
var GreenValue = Item.value;
var StepTime = Item.steptime;
var StartNumber = Item.startnumber;
var StartServer = Item.starttime;
var mouseX = Item.mouseX;
if(!arr)
return ;
var obj = document.getElementById(Item.id);
var ctx = obj.getContext('2d');
var Left = 50;
var Top = 11;
var Button = 15;
var Right = 50;
if(Item.fillStyle)
ctx.fillStyle = Item.fillStyle;
else
ctx.fillStyle = "#FFF";
ctx.fillRect(0, 0, obj.width, obj.height);
if(arr.length <= 0)
return ;
var Pow2 = 0;
if(Item.name.substr(Item.name.length - 2) === "**")
Pow2 = 1;
var MaxValue = arr[0];
var MinValue = arr[0];
var AvgValue = 0;
for(var i = 0; i < arr.length; i++)
{
if(arr[i] > MaxValue)
MaxValue = arr[i];
if(arr[i] < MinValue)
MinValue = arr[i];
if(arr[i])
AvgValue += arr[i];
}
if(Item.name.substr(0, 4) !== "MAX:" || !Item.AvgValue)
AvgValue = AvgValue / arr.length;
else
AvgValue = Item.AvgValue;
if(Pow2 && AvgValue)
AvgValue = Math.pow(2, AvgValue) / 1000000;
if(AvgValue < 50)
AvgValue = AvgValue.toFixed(2);
else
AvgValue = Math.floor(AvgValue);
if(Item.MaxValue !== undefined)
MaxValue = Item.MaxValue;
if(Pow2 && MaxValue)
MaxValue = Math.pow(2, MaxValue) / 1000000;
var HValue = MaxValue;
if(HValue <= 0)
HValue = 1;
var KX = (obj.width - Left - Right) / arr.length;
var KY = (obj.height - Top - Button) / HValue;
var DeltaY = 0;
var bLine = Item.line;
if(Item.zero)
{
bLine = 1;
DeltaY -= Item.zero * KY;
MaxValue -= Item.zero;
AvgValue -= Item.zero;
}
MaxValue = Math.floor(MaxValue + 0.5);
if(bLine)
ctx.lineWidth = 3;
else
if(KX > 1)
ctx.lineWidth = KX;
else
ctx.lineWidth = 1;
var StartX = Left;
var StartY = obj.height - Button;
var mouseValueX = 0;
var mouseValue = undefined;
var mouseColor = undefined;
function DrawLines(arr,mode,color)
{
ctx.beginPath();
ctx.moveTo(Left, obj.height - Button);
ctx.strokeStyle = color;
var PrevX = undefined;
for(var i = 0; i < arr.length; i++)
{
var Value = arr[i];
if(!Value)
Value = 0;
if(Pow2 && Value)
Value = Math.pow(2, Value) / 1000000;
if(mode === "green")
{
if(Value > GreenValue)
continue;
}
else
if(mode === "red")
{
if(Value <= GreenValue)
continue;
}
var Value1 = Value;
if(Value1 > GreenValue)
Value1 = GreenValue;
var VX1 = Math.floor(Value1 * KY);
var VX2 = Math.floor(Value * KY);
if(VX1 === VX2)
VX1 -= 2;
var x = StartX + ctx.lineWidth / 2 + (i) * KX;
if(bLine)
{
ctx.lineTo(x, StartY - VX2);
}
else
{
ctx.moveTo(x, StartY - VX1);
ctx.lineTo(x, StartY - VX2);
}
if(mouseX)
{
var deltaCur = Math.abs(x - mouseX);
var deltaWas = Math.abs(mouseValueX - mouseX);
if(deltaCur < deltaWas)
{
mouseValueX = x;
mouseValue = Value;
if(Item.zero)
mouseValue -= Item.zero;
mouseColor = color;
}
}
}
ctx.stroke();
};
if(!Item.red)
Item.red = "#A00";
if(bLine)
{
DrawLines(arr, "line", Item.red);
}
else
{
DrawLines(arr, "red", Item.red);
if(GreenValue > 0)
DrawLines(arr, "green", "#0A0");
}
ctx.lineWidth = 0.5;
ctx.beginPath();
ctx.strokeStyle = "#000";
Left--;
StartX--;
StartY += 2;
ctx.moveTo(Left, Top);
ctx.lineTo(StartX, StartY);
ctx.moveTo(StartX, StartY + DeltaY);
ctx.lineTo(obj.width - 10, StartY + DeltaY);
ctx.stroke();
if(mouseX !== undefined)
{
ctx.beginPath();
ctx.lineWidth = 0.5;
ctx.strokeStyle = "#00F";
ctx.moveTo(mouseX, Top);
ctx.lineTo(mouseX, StartY);
ctx.stroke();
if(mouseValue !== undefined)
{
ctx.fillStyle = mouseColor;
var Str = "" + Math.floor(mouseValue + 0.5);
ctx.fillText(Str, mouseX - 3, Top - 2);
}
}
ctx.fillStyle = "#000";
ctx.fillText(Rigth("" + MaxValue, 8), 0, Top - 3);
if(MaxValue > 0 && AvgValue > 0)
{
var heigh = StartY - Top;
var KKY = AvgValue / MaxValue;
var y = (heigh - Math.floor(KKY * heigh));
var yT = y;
if(yT < 10)
{
yT = 10;
}
ctx.beginPath();
ctx.moveTo(Left - 2, y + Top);
ctx.lineTo(Left + 2, y + Top);
ctx.stroke();
ctx.strokeStyle = "#00F";
ctx.fillText(Rigth("" + AvgValue, 8), 0, yT + Top);
}
var CountNameX = 10;
if(arr.length < CountNameX)
CountNameX = arr.length;
var KX3 = (obj.width - Left - Right) / CountNameX;
var KDelitel = 1;
var Step = arr.length / CountNameX;
var StartTime, bNumber;
if(StartNumber !== undefined)
{
bNumber = 1;
StartTime = StartNumber;
}
else
if(StartServer)
{
bNumber = 1;
StartTime = Math.floor(((Date.now() - StartServer) - StepTime * arr.length * 1000) / 1000);
if(StartTime < 0)
StartTime = 0;
var KDelitel = Math.floor(Step / 10) * 10;
if(KDelitel == 0)
KDelitel = 1;
}
else
{
bNumber = 0;
StartTime = Date.now() - StepTime * arr.length * 1000;
StartX = StartX - 16;
}
for(i = 0; i <= CountNameX; i++)
{
var Val;
if(i === CountNameX)
{
Val = arr.length * StepTime;
KDelitel = 1;
}
else
if(i === 0)
Val = 0;
else
Val = i * Step * StepTime;
var Str;
if(bNumber)
{
Val = Math.floor((StartTime + Val) / KDelitel) * KDelitel;
Str = Val;
}
else
{
var Time = new Date(StartTime + Val * 1000);
Str = "" + Time.getHours();
Str += ":" + Rigth("0" + Time.getMinutes(), 2);
Str += ":" + Rigth("0" + Time.getSeconds(), 2);
}
ctx.fillText(Str, StartX + i * KX3, StartY + 10);
}
};
function InitDiagramByArr(Arr,width)
{
for(var i = 0; i < Arr.length; i++)
{
Arr[i].num = i + 1;
SetHTMLDiagramItem(Arr[i], width);
}
window.addEventListener('mousedown', function (event)
{
SetDiagramMouseX(event, "down");
}, false);
window.addEventListener('mouseup', function (event)
{
SetDiagramMouseX(event, "up");
}, false);
window.addEventListener('onmousemove', function (event)
{
SetDiagramMouseX(event, "move");
}, false);
};
function getMouse(canvas,e)
{
var x = e.clientX - getTrueOffsetLeft(canvas);
if(window.pageXOffset)
x = x + window.pageXOffset;
var y = e.clientY - getTrueOffsetTop(canvas);
if(window.pageYOffset)
y = y + window.pageYOffset;
var coord = {x:x, y:y};
return coord;
};
function getTrueOffsetLeft(ele)
{
var n = 0;
while(ele)
{
n += ele.offsetLeft || 0;
ele = ele.offsetParent;
}
return n;
};
function getTrueOffsetTop(ele)
{
var n = 0;
while(ele)
{
n += ele.offsetTop || 0;
ele = ele.offsetParent;
}
return n;
};

View File

@ -0,0 +1 @@
function FLanguage(e){var n={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],case_insensitive:!0,contains:[{className:"meta",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{name:"style"},contains:[n],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{name:"script"},contains:[n],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},n]}]}}hljs.registerLanguage("html",FLanguage);

View File

@ -0,0 +1 @@
function FLanguage(e){var n="[A-Za-z$_][0-9A-Za-z$_]*",a={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},s={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},i={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,s]};s.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,r,e.REGEXP_MODE];var t=s.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx"],keywords:a,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:n+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:n,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+n+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:t}]}]},{begin:/</,end:/(\/\w+|\w+\/)>/,subLanguage:"xml",contains:[{begin:/<\w+\s*\/>/,skip:!0},{begin:/<\w+/,end:/(\/\w+|\w+\/)>/,skip:!0,contains:[{begin:/<\w+\s*\/>/,skip:!0},"self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:n}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:t}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}hljs.registerLanguage("javascript",FLanguage),hljs.registerLanguage("js",FLanguage);

File diff suppressed because one or more lines are too long

1686
Source/HTML/JS/lexer.js Normal file

File diff suppressed because it is too large Load Diff

1
Source/HTML/JS/marked.js Normal file

File diff suppressed because one or more lines are too long

190
Source/HTML/JS/sec256k1.js Normal file
View File

@ -0,0 +1,190 @@
/*
* @project: TERA
* @version: Development (beta)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* @license: MIT (not for evil)
* Web: http://terafoundation.org
* GitHub: https://github.com/terafoundation/wallet
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
"use strict";
var der = require("./der"), toString = Object.prototype.toString, exports = {}, assert = exports;
exports.isArray = function (e,s)
{
if(!Array.isArray(e))
throw TypeError(s);
}, exports.isBoolean = function (e,s)
{
if("[object Boolean]" !== toString.call(e))
throw TypeError(s);
}, exports.isBuffer = function (e,s)
{
if(!Buffer.isBuffer(e))
throw TypeError(s);
}, exports.isFunction = function (e,s)
{
if("[object Function]" !== toString.call(e))
throw TypeError(s);
}, exports.isNumber = function (e,s)
{
if("[object Number]" !== toString.call(e))
throw TypeError(s);
}, exports.isObject = function (e,s)
{
if("[object Object]" !== toString.call(e))
throw TypeError(s);
}, exports.isBufferLength = function (e,s,r)
{
if(e.length !== s)
throw RangeError(r);
}, exports.isBufferLength2 = function (e,s,r,_)
{
if(e.length !== s && e.length !== r)
throw RangeError(_);
}, exports.isLengthGTZero = function (e,s)
{
if(0 === e.length)
throw RangeError(s);
}, exports.isNumberInInterval = function (e,s,r,_)
{
if(e <= s || r <= e)
throw RangeError(_);
};
var messages = {COMPRESSED_TYPE_INVALID:"compressed should be a boolean", EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",
EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid", EC_PRIVATE_KEY_RANGE_INVALID:"private key range is invalid",
EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid", EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",
EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format", EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",
EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array", EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",
EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer", EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid", EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",
EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again", EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",
EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range", EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid", ECDH_FAIL:"scalar was invalid (zero or overflow)",
ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer", ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",
ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature", ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature", ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",
ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid", ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",
MSG32_TYPE_INVALID:"message should be a Buffer", MSG32_LENGTH_INVALID:"message length is invalid", OPTIONS_TYPE_INVALID:"options should be an Object",
OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer", OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",
OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function", RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",
RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4", TWEAK_TYPE_INVALID:"tweak should be a Buffer", TWEAK_LENGTH_INVALID:"tweak length is invalid"};
function initCompressedValue(e,s)
{
return void 0 === e ? s : (assert.isBoolean(e, messages.COMPRESSED_TYPE_INVALID), e);
};
module.exports = function (E)
{
return {privateKeyVerify:function (e)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), 32 === e.length && E.privateKeyVerify(e);
}, privateKeyExport:function (e,s)
{
assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
s = initCompressedValue(s, !0);
var r = E.privateKeyExport(e, s);
return der.privateKeyExport(e, r, s);
}, privateKeyImport:function (e)
{
if(assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), (e = der.privateKeyImport(e)) && 32 === e.length && E.privateKeyVerify(e))
return e;
throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL);
}, privateKeyNegate:function (e)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
E.privateKeyNegate(e);
}, privateKeyModInverse:function (e)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
E.privateKeyModInverse(e);
}, privateKeyTweakAdd:function (e,s)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakAdd(e,
s);
}, privateKeyTweakMul:function (e,s)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakMul(e,
s);
}, publicKeyCreate:function (e,s)
{
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
s = initCompressedValue(s, !0), E.publicKeyCreate(e, s);
}, publicKeyConvert:function (e,s)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
s = initCompressedValue(s, !0), E.publicKeyConvert(e, s);
}, publicKeyVerify:function (e)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), E.publicKeyVerify(e);
}, publicKeyTweakAdd:function (e,s,r)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
!0), E.publicKeyTweakAdd(e, s, r);
}, publicKeyTweakMul:function (e,s,r)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
!0), E.publicKeyTweakMul(e, s, r);
}, publicKeyCombine:function (e,s)
{
assert.isArray(e, messages.EC_PUBLIC_KEYS_TYPE_INVALID), assert.isLengthGTZero(e, messages.EC_PUBLIC_KEYS_LENGTH_INVALID);
for(var r = 0; r < e.length; ++r)
assert.isBuffer(e[r], messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e[r], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID);
return s = initCompressedValue(s, !0), E.publicKeyCombine(e, s);
}, signatureNormalize:function (e)
{
return assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(e, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID),
E.signatureNormalize(e);
}, signatureExport:function (e)
{
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(e, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
var s = E.signatureExport(e);
return der.signatureExport(s);
}, signatureImport:function (e)
{
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isLengthGTZero(e, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
var s = der.signatureImport(e);
if(s)
return E.signatureImport(s);
throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL);
}, signatureImportLax:function (e)
{
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isLengthGTZero(e, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
var s = der.signatureImportLax(e);
if(s)
return E.signatureImport(s);
throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL);
}, sign:function (e,s,r)
{
assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID);
var _ = null, t = null;
return void 0 !== r && (assert.isObject(r, messages.OPTIONS_TYPE_INVALID), void 0 !== r.data && (assert.isBuffer(r.data, messages.OPTIONS_DATA_TYPE_INVALID),
assert.isBufferLength(r.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID), _ = r.data), void 0 !== r.noncefn && (assert.isFunction(r.noncefn,
messages.OPTIONS_NONCEFN_TYPE_INVALID), t = r.noncefn)), E.sign(e, s, t, _);
}, verify:function (e,s,r)
{
return assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isBuffer(r,
messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(r, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID), E.verify(e,
s, r);
}, recover:function (e,s,r,_)
{
return assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isNumber(r,
messages.RECOVERY_ID_TYPE_INVALID), assert.isNumberInInterval(r, - 1, 4, messages.RECOVERY_ID_VALUE_INVALID), _ = initCompressedValue(_,
!0), E.recover(e, s, r, _);
}, ecdh:function (e,s)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
E.ecdh(e, s);
}, ecdhUnsafe:function (e,s,r)
{
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
r = initCompressedValue(r, !0), E.ecdhUnsafe(e, s, r);
}};
}, global.SIGN_LIB = module.exports;

337
Source/HTML/JS/sha3.js Normal file
View File

@ -0,0 +1,337 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
function meshhash(t,r)
{
for(var e = [t[3], t[2], t[1], t[0]], a = [], n = 0; n < 16; n++)
a[n] = t[2 * n] + (t[2 * n + 1] << 8);
var s = 0, i = 0;
for(n = 0; n < 64; n++)
{
var o = t[31 & i];
i++;
var u = o >> 4 & 15, h = 15 & o, f = 3 & o;
switch(u)
{
case 0:
e[0] = e[0] + e[f];
break;
case 1:
e[0] = e[0] * e[f];
break;
case 2:
e[0] = e[0] | e[f];
break;
case 3:
e[0] = e[0] & e[f];
break;
case 4:
case 5:
case 6:
case 7:
e[0] = e[0] + e[1] + e[2] + e[3];
break;
case 8:
(65535 & e[0]) < 32768 && !s && (i = 32 + i - h, s = 1);
break;
case 9:
32768 < (65535 & e[0]) && !s && (i += h, s = 1);
break;
default:
e[u % 4] = a[h];
}
var c = 15 & e[0], p = e[0] >> 8 & 15;
if(c !== p)
{
var d = a[c];
a[c] = a[p], a[p] = d;
}
}
var y = [];
for(n = 0; n < 16; n++)
y[2 * n] = 255 & a[n], y[2 * n + 1] = a[n] >> 8;
return sha3_array_256(y);
};
!function ()
{
"use strict";
var f = "object" == typeof window ? window : {};
!f.JS_SHA3_NO_NODE_JS && "object" == typeof process && process.versions && process.versions.node && !f.RUN_NW_CLIENT && (f = global),
f.RUN_CLIENT && (f = window);
!f.JS_SHA3_NO_COMMON_JS && "object" == typeof module && module.exports;
var c = !f.JS_SHA3_NO_ARRAY_BUFFER && "undefined" != typeof ArrayBuffer, u = "0123456789abcdef".split(""), t = [4, 1024, 262144,
67108864], r = [6, 1536, 393216, 100663296], p = [0, 8, 16, 24], ft = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648,
32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555,
0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648], e = [224, 256, 384, 512], a = [128, 256],
i = ["hex", "buffer", "arrayBuffer", "array"], o = {128:168, 256:136};
!f.JS_SHA3_NO_NODE_JS && Array.isArray || (Array.isArray = function (t)
{
return "[object Array]" === Object.prototype.toString.call(t);
});
for(var n = function (r,e,a)
{
return function (t)
{
return new m(r, e, r).update(t)[a]();
};
}, s = function (e,a,n)
{
return function (t,r)
{
return new m(e, a, r).update(t)[n]();
};
}, h = function (n,t,s)
{
return function (t,r,e,a)
{
return _["cshake" + n].update(t, r, e, a)[s]();
};
}, d = function (n,t,s)
{
return function (t,r,e,a)
{
return _["kmac" + n].update(t, r, e, a)[s]();
};
}, y = function (t,r,e,a)
{
for(var n = 0; n < i.length; ++n)
{
var s = i[n];
t[s] = r(e, a, s);
}
return t;
}, l = function (t,r,e)
{
var a = n(t, r, e);
return a.create = function ()
{
return new m(t, r, t);
}, a.update = function (t)
{
return a.create().update(t);
}, y(a, n, t, r);
}, b = [{name:"keccak", padding:[1, 256, 65536, 16777216], bits:e, createMethod:l}, {name:"sha3", padding:r, bits:e, createMethod:l,
outputs:"hex"}, {name:"sha3_array", padding:r, bits:e, createMethod:l, outputs:"array"}, {name:"sha3_buf", padding:r, bits:e,
createMethod:l, outputs:"buffer"}, {name:"shake", padding:[31, 7936, 2031616, 520093696], bits:a, createMethod:function (r,e)
{
var a = s(r, e, "hex");
return a.create = function (t)
{
return new m(r, e, t);
}, a.update = function (t,r)
{
return a.create(r).update(t);
}, y(a, s, r, e);
}}, {name:"cshake", padding:t, bits:a, createMethod:function (a,n)
{
var s = o[a], i = h(a, 0, "hex");
return i.create = function (t,r,e)
{
return r || e ? new m(a, n, t).bytepad([r, e], s) : _["shake" + a].create(t);
}, i.update = function (t,r,e,a)
{
return i.create(r, e, a).update(t);
}, y(i, h, a, n);
}}, {name:"kmac", padding:t, bits:a, createMethod:function (a,n)
{
var s = o[a], i = d(a, 0, "hex");
return i.create = function (t,r,e)
{
return new w(a, n, r).bytepad(["KMAC", e], s).bytepad([t], s);
}, i.update = function (t,r,e,a)
{
return i.create(t, e, a).update(r);
}, y(i, d, a, n);
}}], _ = {}, v = [], A = 0; A < b.length; ++A)
for(var k = b[A], g = k.bits, B = 0; B < g.length; ++B)
{
var O = k.name + "_" + g[B];
if(v.push(O), _[O] = k.createMethod(g[B], k.padding, k.outputs), "sha3" !== k.name)
{
var R = k.name + g[B];
v.push(R), _[R] = _[O];
}
}
function m(t,r,e)
{
this.blocks = [], this.s = [], this.padding = r, this.outputBits = e, this.reset = !0, this.block = 0, this.start = 0, this.blockCount = 1600 - (t << 1) >> 5,
this.byteCount = this.blockCount << 2, this.outputBlocks = e >> 5, this.extraBytes = (31 & e) >> 3;
for(var a = 0; a < 50; ++a)
this.s[a] = 0;
};
function w(t,r,e)
{
m.call(this, t, r, e);
};
m.prototype.update = function (t)
{
var r = "string" != typeof t;
if(r && t.constructor === f.ArrayBuffer)
return TO_ERROR_LOG("SHA3", 10, "ERROR: Error type ArrayBuffer, use Uint8Array instead!"), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var e = t.length;
if(r && ("number" != typeof e || !Array.isArray(t) && (!c || !ArrayBuffer.isView(t))))
return TO_ERROR_LOG("SHA3", 20, "ERROR: Input is invalid type, message=" + JSON.stringify(t)), [0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var a, n, s = this.blocks, i = this.byteCount, o = this.blockCount, u = 0, h = this.s; u < e; )
{
if(this.reset)
for(this.reset = !1, s[0] = this.block, a = 1; a < o + 1; ++a)
s[a] = 0;
if(r)
for(a = this.start; u < e && a < i; ++u)
s[a >> 2] |= t[u] << p[3 & a++];
else
for(a = this.start; u < e && a < i; ++u)
(n = t.charCodeAt(u)) < 128 ? s[a >> 2] |= n << p[3 & a++] : (n < 2048 ? s[a >> 2] |= (192 | n >> 6) << p[3 & a++] : (n < 55296 || 57344 <= n ? s[a >> 2] |= (224 | n >> 12) << p[3 & a++] : (n = 65536 + ((1023 & n) << 10 | 1023 & t.charCodeAt(++u)),
s[a >> 2] |= (240 | n >> 18) << p[3 & a++], s[a >> 2] |= (128 | n >> 12 & 63) << p[3 & a++]), s[a >> 2] |= (128 | n >> 6 & 63) << p[3 & a++]),
s[a >> 2] |= (128 | 63 & n) << p[3 & a++]);
if(i <= (this.lastByteIndex = a))
{
for(this.start = a - i, this.block = s[o], a = 0; a < o; ++a)
h[a] ^= s[a];
S(h), this.reset = !0;
}
else
this.start = a;
}
return this;
}, m.prototype.encode = function (t,r)
{
var e = 255 & t, a = 1, n = [e];
for(e = 255 & (t >>= 8); 0 < e; )
n.unshift(e), e = 255 & (t >>= 8), ++a;
return r ? n.push(a) : n.unshift(a), this.update(n), n.length;
}, m.prototype.encodeString = function (t)
{
var r = "string" != typeof (t = t || "");
r && t.constructor === f.ArrayBuffer && (t = new Uint8Array(t));
var e = t.length;
if(r && ("number" != typeof e || !Array.isArray(t) && (!c || !ArrayBuffer.isView(t))))
return TO_ERROR_LOG("SHA3", 30, "ERROR: Input is invalid type, str=" + JSON.stringify(t)), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var a = 0;
if(r)
a = e;
else
for(var n = 0; n < t.length; ++n)
{
var s = t.charCodeAt(n);
s < 128 ? a += 1 : s < 2048 ? a += 2 : s < 55296 || 57344 <= s ? a += 3 : (s = 65536 + ((1023 & s) << 10 | 1023 & t.charCodeAt(++n)),
a += 4);
}
return a += this.encode(8 * a), this.update(t), a;
}, m.prototype.bytepad = function (t,r)
{
for(var e = this.encode(r), a = 0; a < t.length; ++a)
e += this.encodeString(t[a]);
var n = r - e % r, s = [];
return s.length = n, this.update(s), this;
}, m.prototype.finalize = function ()
{
var t = this.blocks, r = this.lastByteIndex, e = this.blockCount, a = this.s;
if(t[r >> 2] |= this.padding[3 & r], this.lastByteIndex === this.byteCount)
for(t[0] = t[e], r = 1; r < e + 1; ++r)
t[r] = 0;
for(t[e - 1] |= 2147483648, r = 0; r < e; ++r)
a[r] ^= t[r];
S(a);
}, m.prototype.toString = m.prototype.hex = function ()
{
this.finalize();
for(var t, r = this.blockCount, e = this.s, a = this.outputBlocks, n = this.extraBytes, s = 0, i = 0, o = ""; i < a; )
{
for(s = 0; s < r && i < a; ++s, ++i)
t = e[s], o += u[t >> 4 & 15] + u[15 & t] + u[t >> 12 & 15] + u[t >> 8 & 15] + u[t >> 20 & 15] + u[t >> 16 & 15] + u[t >> 28 & 15] + u[t >> 24 & 15];
i % r == 0 && (S(e), s = 0);
}
return n && (t = e[s], 0 < n && (o += u[t >> 4 & 15] + u[15 & t]), 1 < n && (o += u[t >> 12 & 15] + u[t >> 8 & 15]), 2 < n && (o += u[t >> 20 & 15] + u[t >> 16 & 15])),
o;
}, m.prototype.buffer = m.prototype.arrayBuffer = function ()
{
this.finalize();
var t, r = this.blockCount, e = this.s, a = this.outputBlocks, n = this.extraBytes, s = 0, i = 0, o = this.outputBits >> 3;
t = n ? new ArrayBuffer(a + 1 << 2) : new ArrayBuffer(o);
for(var u = new Uint32Array(t); i < a; )
{
for(s = 0; s < r && i < a; ++s, ++i)
u[i] = e[s];
i % r == 0 && S(e);
}
return n && (u[s] = e[s], t = t.slice(0, o)), t;
}, m.prototype.digest = m.prototype.array = function ()
{
this.finalize();
for(var t, r, e = this.blockCount, a = this.s, n = this.outputBlocks, s = this.extraBytes, i = 0, o = 0, u = []; o < n; )
{
for(i = 0; i < e && o < n; ++i, ++o)
t = o << 2, r = a[i], u[t] = 255 & r, u[t + 1] = r >> 8 & 255, u[t + 2] = r >> 16 & 255, u[t + 3] = r >> 24 & 255;
o % e == 0 && S(a);
}
return s && (t = o << 2, r = a[i], 0 < s && (u[t] = 255 & r), 1 < s && (u[t + 1] = r >> 8 & 255), 2 < s && (u[t + 2] = r >> 16 & 255)),
u;
}, (w.prototype = new m).finalize = function ()
{
return this.encode(this.outputBits, !0), m.prototype.finalize.call(this);
};
var S = function (t)
{
var r, e, a, n, s, i, o, u, h, f, c, p, d, y, l, b, _, v, A, k, g, B, O, R, m, w, S, C, x, N, E, M, J, H, I, z, U, j, L, T,
G, D, F, V, K, W, Y, q, P, Q, X, Z, $, tt, rt, et, at, nt, st, it, ot, ut, ht;
for(a = 0; a < 48; a += 2)
n = t[0] ^ t[10] ^ t[20] ^ t[30] ^ t[40], s = t[1] ^ t[11] ^ t[21] ^ t[31] ^ t[41], i = t[2] ^ t[12] ^ t[22] ^ t[32] ^ t[42],
o = t[3] ^ t[13] ^ t[23] ^ t[33] ^ t[43], u = t[4] ^ t[14] ^ t[24] ^ t[34] ^ t[44], h = t[5] ^ t[15] ^ t[25] ^ t[35] ^ t[45],
f = t[6] ^ t[16] ^ t[26] ^ t[36] ^ t[46], c = t[7] ^ t[17] ^ t[27] ^ t[37] ^ t[47], r = (p = t[8] ^ t[18] ^ t[28] ^ t[38] ^ t[48]) ^ (i << 1 | o >>> 31),
e = (d = t[9] ^ t[19] ^ t[29] ^ t[39] ^ t[49]) ^ (o << 1 | i >>> 31), t[0] ^= r, t[1] ^= e, t[10] ^= r, t[11] ^= e, t[20] ^= r,
t[21] ^= e, t[30] ^= r, t[31] ^= e, t[40] ^= r, t[41] ^= e, r = n ^ (u << 1 | h >>> 31), e = s ^ (h << 1 | u >>> 31), t[2] ^= r,
t[3] ^= e, t[12] ^= r, t[13] ^= e, t[22] ^= r, t[23] ^= e, t[32] ^= r, t[33] ^= e, t[42] ^= r, t[43] ^= e, r = i ^ (f << 1 | c >>> 31),
e = o ^ (c << 1 | f >>> 31), t[4] ^= r, t[5] ^= e, t[14] ^= r, t[15] ^= e, t[24] ^= r, t[25] ^= e, t[34] ^= r, t[35] ^= e,
t[44] ^= r, t[45] ^= e, r = u ^ (p << 1 | d >>> 31), e = h ^ (d << 1 | p >>> 31), t[6] ^= r, t[7] ^= e, t[16] ^= r, t[17] ^= e,
t[26] ^= r, t[27] ^= e, t[36] ^= r, t[37] ^= e, t[46] ^= r, t[47] ^= e, r = f ^ (n << 1 | s >>> 31), e = c ^ (s << 1 | n >>> 31),
t[8] ^= r, t[9] ^= e, t[18] ^= r, t[19] ^= e, t[28] ^= r, t[29] ^= e, t[38] ^= r, t[39] ^= e, t[48] ^= r, t[49] ^= e, y = t[0],
l = t[1], W = t[11] << 4 | t[10] >>> 28, Y = t[10] << 4 | t[11] >>> 28, C = t[20] << 3 | t[21] >>> 29, x = t[21] << 3 | t[20] >>> 29,
it = t[31] << 9 | t[30] >>> 23, ot = t[30] << 9 | t[31] >>> 23, D = t[40] << 18 | t[41] >>> 14, F = t[41] << 18 | t[40] >>> 14,
H = t[2] << 1 | t[3] >>> 31, I = t[3] << 1 | t[2] >>> 31, b = t[13] << 12 | t[12] >>> 20, _ = t[12] << 12 | t[13] >>> 20, q = t[22] << 10 | t[23] >>> 22,
P = t[23] << 10 | t[22] >>> 22, N = t[33] << 13 | t[32] >>> 19, E = t[32] << 13 | t[33] >>> 19, ut = t[42] << 2 | t[43] >>> 30,
ht = t[43] << 2 | t[42] >>> 30, tt = t[5] << 30 | t[4] >>> 2, rt = t[4] << 30 | t[5] >>> 2, z = t[14] << 6 | t[15] >>> 26,
U = t[15] << 6 | t[14] >>> 26, v = t[25] << 11 | t[24] >>> 21, A = t[24] << 11 | t[25] >>> 21, Q = t[34] << 15 | t[35] >>> 17,
X = t[35] << 15 | t[34] >>> 17, M = t[45] << 29 | t[44] >>> 3, J = t[44] << 29 | t[45] >>> 3, R = t[6] << 28 | t[7] >>> 4,
m = t[7] << 28 | t[6] >>> 4, et = t[17] << 23 | t[16] >>> 9, at = t[16] << 23 | t[17] >>> 9, j = t[26] << 25 | t[27] >>> 7,
L = t[27] << 25 | t[26] >>> 7, k = t[36] << 21 | t[37] >>> 11, g = t[37] << 21 | t[36] >>> 11, Z = t[47] << 24 | t[46] >>> 8,
$ = t[46] << 24 | t[47] >>> 8, V = t[8] << 27 | t[9] >>> 5, K = t[9] << 27 | t[8] >>> 5, w = t[18] << 20 | t[19] >>> 12, S = t[19] << 20 | t[18] >>> 12,
nt = t[29] << 7 | t[28] >>> 25, st = t[28] << 7 | t[29] >>> 25, T = t[38] << 8 | t[39] >>> 24, G = t[39] << 8 | t[38] >>> 24,
B = t[48] << 14 | t[49] >>> 18, O = t[49] << 14 | t[48] >>> 18, t[0] = y ^ ~b & v, t[1] = l ^ ~_ & A, t[10] = R ^ ~w & C, t[11] = m ^ ~S & x,
t[20] = H ^ ~z & j, t[21] = I ^ ~U & L, t[30] = V ^ ~W & q, t[31] = K ^ ~Y & P, t[40] = tt ^ ~et & nt, t[41] = rt ^ ~at & st,
t[2] = b ^ ~v & k, t[3] = _ ^ ~A & g, t[12] = w ^ ~C & N, t[13] = S ^ ~x & E, t[22] = z ^ ~j & T, t[23] = U ^ ~L & G, t[32] = W ^ ~q & Q,
t[33] = Y ^ ~P & X, t[42] = et ^ ~nt & it, t[43] = at ^ ~st & ot, t[4] = v ^ ~k & B, t[5] = A ^ ~g & O, t[14] = C ^ ~N & M,
t[15] = x ^ ~E & J, t[24] = j ^ ~T & D, t[25] = L ^ ~G & F, t[34] = q ^ ~Q & Z, t[35] = P ^ ~X & $, t[44] = nt ^ ~it & ut,
t[45] = st ^ ~ot & ht, t[6] = k ^ ~B & y, t[7] = g ^ ~O & l, t[16] = N ^ ~M & R, t[17] = E ^ ~J & m, t[26] = T ^ ~D & H, t[27] = G ^ ~F & I,
t[36] = Q ^ ~Z & V, t[37] = X ^ ~$ & K, t[46] = it ^ ~ut & tt, t[47] = ot ^ ~ht & rt, t[8] = B ^ ~y & b, t[9] = O ^ ~l & _,
t[18] = M ^ ~R & w, t[19] = J ^ ~m & S, t[28] = D ^ ~H & z, t[29] = F ^ ~I & U, t[38] = Z ^ ~V & W, t[39] = $ ^ ~K & Y, t[48] = ut ^ ~tt & et,
t[49] = ht ^ ~rt & at, t[0] ^= ft[a], t[1] ^= ft[a + 1];
};
f.sha3_str = _.sha3_256, f.sha3_array_256 = _.sha3_array_256, f.sha3 = _.sha3_array_256, f.sha = function (t)
{
return meshhash(_.sha3_256(t));
}, f.shaarr = function (t)
{
return meshhash(_.sha3_array_256(t));
}, f.shabuf = function (t)
{
return Buffer.from(shaarr(t));
}, f.shaarrblock = function (t,r)
{
return meshhash(_.sha3_array_256(t), r);
};
}();

4140
Source/HTML/JS/sign-lib-min.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,464 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var DELTA_LONG_MINING = 5000;
var BLOCKNUM_ALGO2 = 6560000;
var BLOCKNUM_HASH_NEW = 10195000;
var BLOCKNUM_TICKET_ALGO = 16070000;
if(typeof global === "object")
{
global.GetHashFromSeqAddr = GetHashFromSeqAddr;
global.CalcHashBlockFromSeqAddr = CalcHashBlockFromSeqAddr;
global.GetHashFromNum2 = GetHashFromNum2;
global.GetHashFromNum3 = GetHashFromNum3;
global.GetHashFromArrNum2 = GetHashFromArrNum2;
global.XORArr = XORArr;
global.GetHash = GetHash;
if(global.LOCAL_RUN || global.TEST_NETWORK)
{
BLOCKNUM_ALGO2 = 0;
if(global.TEST_NETWORK)
{
BLOCKNUM_HASH_NEW = 1000;
global.BLOCKNUM_TICKET_ALGO = 1296300;
}
else
{
BLOCKNUM_HASH_NEW = 100;
BLOCKNUM_TICKET_ALGO = 0;
}
}
}
function GetHashFromSeqAddr(SeqHash,AddrHash,BlockNum,PrevHash,MiningVer)
{
if(BlockNum < BLOCKNUM_ALGO2)
{
var Hash = shaarrblock2(SeqHash, AddrHash, BlockNum);
return {Hash:Hash, PowHash:Hash, Hash1:Hash, Hash2:Hash};
}
var MinerID = ReadUintFromArr(AddrHash, 0);
var Nonce0 = ReadUintFromArr(AddrHash, 6);
var Nonce1 = ReadUintFromArr(AddrHash, 12);
var Nonce2 = ReadUintFromArr(AddrHash, 18);
var DeltaNum1 = ReadUint16FromArr(AddrHash, 24);
var DeltaNum2 = ReadUint16FromArr(AddrHash, 26);
var PrevHashNum;
if(PrevHash)
{
PrevHashNum = ReadUint32FromArr(PrevHash, 28);
}
else
{
PrevHashNum = ReadUint32FromArr(AddrHash, 28);
}
var Data = GetHash(SeqHash, PrevHashNum, BlockNum, MinerID, Nonce0, Nonce1, Nonce2, DeltaNum1, DeltaNum2);
if(MiningVer)
{
if(AddrHash[17] !== MiningVer || AddrHash[23] !== MiningVer)
{
Data.PowHash = [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255];
}
}
return Data;
};
function GetHash(BlockHash,PrevHashNum,BlockNum,Miner,Nonce0,Nonce1,Nonce2,DeltaNum1,DeltaNum2)
{
if(DeltaNum1 > DELTA_LONG_MINING)
DeltaNum1 = 0;
if(DeltaNum2 > DELTA_LONG_MINING)
DeltaNum2 = 0;
var HashBase = GetHashFromNum2(BlockNum, PrevHashNum);
var HashCurrent = GetHashFromArrNum2(BlockHash, Miner, Nonce0);
var HashNonce1 = GetHashFromNum3(BlockNum - DeltaNum1, Miner, Nonce1);
var HashNonce2 = GetHashFromNum3(BlockNum - DeltaNum2, Miner, Nonce2);
var Hash1 = XORArr(HashBase, HashNonce1);
var Hash2 = XORArr(HashCurrent, HashNonce2);
var Ret = {Hash:Hash2, Hash1:Hash1, Hash2:Hash2};
if(CompareArr(Hash1, Hash2) > 0)
{
Ret.PowHash = Hash1;
}
else
{
Ret.PowHash = Hash2;
}
if(BlockNum >= BLOCKNUM_HASH_NEW)
{
if(BlockNum >= BLOCKNUM_TICKET_ALGO)
Ret.Hash = sha3arr2(Hash1, Hash2);
else
Ret.Hash = shaarr2(Hash1, Hash2);
}
return Ret;
};
function CalcHashBlockFromSeqAddr(Block,PrevHash,MiningVer)
{
var Value = GetHashFromSeqAddr(Block.SeqHash, Block.AddrHash, Block.BlockNum, PrevHash, MiningVer);
Block.Hash = Value.Hash;
Block.PowHash = Value.PowHash;
};
function XORArr(Arr1,Arr2)
{
var Ret = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var i = 0; i < 32; i++)
{
Ret[i] = Arr1[i] ^ Arr2[i];
}
return Ret;
};
function GetHashFromNum2(Value1,Value2)
{
var MeshArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
WriteUintToArrOnPos(MeshArr, Value1, 0);
WriteUintToArrOnPos(MeshArr, Value2, 6);
return sha3(MeshArr);
};
function GetHashFromArrNum2(Arr,Value1,Value2)
{
var MeshArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0];
WriteArrToArrOnPos(MeshArr, Arr, 0, 32);
WriteUintToArrOnPos(MeshArr, Value1, 32);
WriteUintToArrOnPos(MeshArr, Value2, 38);
return sha3(MeshArr);
};
function GetHashFromNum3(Value1,Value2,Value3)
{
var MeshArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
WriteUintToArrOnPos(MeshArr, Value1, 0);
WriteUintToArrOnPos(MeshArr, Value2, 6);
WriteUintToArrOnPos(MeshArr, Value3, 12);
return sha3(MeshArr);
};
function ReadUintFromArr(arr,len)
{
if(len === undefined)
{
len = arr.len;
arr.len += 6;
}
var value = (arr[len + 5] << 23) * 2 + (arr[len + 4] << 16) + (arr[len + 3] << 8) + arr[len + 2];
value = value * 256 + arr[len + 1];
value = value * 256 + arr[len];
return value;
};
function ReadUint32FromArr(arr,len)
{
if(len === undefined)
{
len = arr.len;
arr.len += 4;
}
var value = (arr[len + 3] << 23) * 2 + (arr[len + 2] << 16) + (arr[len + 1] << 8) + arr[len];
return value;
};
function ReadUint16FromArr(arr,len)
{
if(len === undefined)
{
len = arr.len;
arr.len += 2;
}
var value = (arr[len + 1] << 8) + arr[len];
return value;
};
function ReadArrFromArr(arr,length)
{
var Ret = [];
var len = arr.len;
for(var i = 0; i < length; i++)
{
Ret[i] = arr[len + i];
}
arr.len += length;
return Ret;
};
function WriteUintToArr(arr,Num)
{
var len = arr.length;
arr[len] = Num & 0xFF;
arr[len + 1] = (Num >>> 8) & 0xFF;
arr[len + 2] = (Num >>> 16) & 0xFF;
arr[len + 3] = (Num >>> 24) & 0xFF;
var NumH = Math.floor(Num / 4294967296);
arr[len + 4] = NumH & 0xFF;
arr[len + 5] = (NumH >>> 8) & 0xFF;
};
function WriteUintToArrOnPos(arr,Num,Pos)
{
arr[Pos] = Num & 0xFF;
arr[Pos + 1] = (Num >>> 8) & 0xFF;
arr[Pos + 2] = (Num >>> 16) & 0xFF;
arr[Pos + 3] = (Num >>> 24) & 0xFF;
var NumH = Math.floor(Num / 4294967296);
arr[Pos + 4] = NumH & 0xFF;
arr[Pos + 5] = (NumH >>> 8) & 0xFF;
};
function WriteUint32ToArr(arr,Num)
{
var len = arr.length;
arr[len] = Num & 0xFF;
arr[len + 1] = (Num >>> 8) & 0xFF;
arr[len + 2] = (Num >>> 16) & 0xFF;
arr[len + 3] = (Num >>> 24) & 0xFF;
};
function WriteUint32ToArrOnPos(arr,Num,Pos)
{
arr[Pos] = Num & 0xFF;
arr[Pos + 1] = (Num >>> 8) & 0xFF;
arr[Pos + 2] = (Num >>> 16) & 0xFF;
arr[Pos + 3] = (Num >>> 24) & 0xFF;
};
function WriteUint16ToArrOnPos(arr,Num,Pos)
{
arr[Pos] = Num & 0xFF;
arr[Pos + 1] = (Num >>> 8) & 0xFF;
};
function WriteArrToArr(arr,arr2,ConstLength)
{
var len = arr.length;
for(var i = 0; i < ConstLength; i++)
{
arr[len + i] = arr2[i];
}
};
function WriteArrToArrOnPos(arr,arr2,Pos,ConstLength)
{
for(var i = 0; i < ConstLength; i++)
{
arr[Pos + i] = arr2[i];
}
};
function WriteArrToArrHOnPos(arr,arr2,Pos,ConstLength)
{
for(var i = 0; i < ConstLength; i++)
{
arr[Pos + i] |= (arr2[i] << 8);
}
};
function ConvertBufferToStr(Data)
{
for(var key in Data)
{
var item = Data[key];
if(item instanceof Buffer)
{
Data[key] = GetHexFromArr(item);
}
else
if(typeof item === "object")
ConvertBufferToStr(item);
}
};
function CopyObjValue(obj,num)
{
if(num && num > 5)
return obj;
var ret = {};
for(var key in obj)
{
var val = obj[key];
if((typeof val === "object") && !(val instanceof Buffer) && !(val instanceof ArrayBuffer) && !(val instanceof Array))
val = CopyObjValue(val, num + 1);
ret[key] = val;
}
return ret;
};
function CopyArr(arr1)
{
var arr2 = [];
if(arr1)
for(var i = 0; i < arr1.length; i++)
arr2[i] = arr1[i];
return arr2;
};
function ParseNum(a)
{
var Num = parseInt(a);
if(!Num)
Num = 0;
if(isNaN(Num))
Num = 0;
if(Num < 0)
Num = 0;
return Num;
};
function CompareArr(a,b)
{
for(var i = 0; i < a.length; i++)
{
if(a[i] !== b[i])
return a[i] - b[i];
}
return 0;
};
function GetSeqHash(BlockNum,PrevHash,TreeHash)
{
var arr = [GetArrFromValue(BlockNum), PrevHash, TreeHash];
var SeqHash = CalcHashFromArray(arr, true);
return SeqHash;
};
function arr2(Value1,Value2)
{
var Buf = [];
for(var n = 0; n < Value1.length; n++)
Buf.push(Value1[n]);
for(var n = 0; n < Value2.length; n++)
Buf.push(Value2[n]);
return Buf;
};
function shaarr2(Value1,Value2)
{
return shaarr(arr2(Value1, Value2));
};
function sha3arr2(Value1,Value2)
{
return sha3(arr2(Value1, Value2));
};
function GetBlockArrFromBuffer(BufRead,Info)
{
if(!BufRead || BufRead.length < 10)
return [];
var BLOCK_PROCESSING_LENGTH = 8;
var BLOCK_PROCESSING_LENGTH2 = BLOCK_PROCESSING_LENGTH * 2;
BufRead.len = 0;
var StartNum = ReadUintFromArr(BufRead);
var CountLoad = ReadUint32FromArr(BufRead);
var BufSize = 6 + 4 + BLOCK_PROCESSING_LENGTH2 * 32 + 32 + 6 + CountLoad * 64;
if(CountLoad <= 0 || BufSize !== BufRead.length)
{
return [];
}
var PrevBlock;
var BlockArr = [];
for(var i = 0; i < CountLoad + BLOCK_PROCESSING_LENGTH2; i++)
{
var Block = {};
Block.BlockNum = StartNum + i;
if(i < BLOCK_PROCESSING_LENGTH2)
{
Block.Hash = ReadArrFromArr(BufRead, 32);
}
else
{
if(i === BLOCK_PROCESSING_LENGTH2)
{
Block.SumHash = ReadArrFromArr(BufRead, 32);
Block.SumPow = ReadUintFromArr(BufRead);
}
Block.TreeHash = ReadArrFromArr(BufRead, 32);
Block.AddrHash = ReadArrFromArr(BufRead, 32);
var arr = [];
var start = i - BLOCK_PROCESSING_LENGTH2;
for(var n = 0; n < BLOCK_PROCESSING_LENGTH; n++)
{
var Prev = BlockArr[start + n];
arr.push(Prev.Hash);
}
Block.PrevHash = CalcHashFromArray(arr, true);
Block.SeqHash = GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash);
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28);
var PrevAddrNum = ReadUint32FromArr(Block.AddrHash, 28);
if(PrevHashNum !== PrevAddrNum && global.WATCHDOG_DEV)
{
var Str = "";
if(Info && Info.Node)
Str = " from " + NodeName(Info.Node);
ToError("Error on block load: " + Block.BlockNum + Str);
return [];
}
CalcHashBlockFromSeqAddr(Block, Block.PrevHash);
Block.Power = GetPowPower(Block.PowHash);
if(PrevBlock)
{
Block.SumHash = shaarr2(PrevBlock.SumHash, Block.Hash);
}
PrevBlock = Block;
}
Block.TrCount = 0;
Block.TrDataPos = 0;
Block.TrDataLen = 0;
BlockArr.push(Block);
}
for(var i = BlockArr.length - 1; i >= 0; i--)
{
var Block = BlockArr[i];
if(!Block.SumHash)
{
BlockArr = BlockArr.slice(i + 1);
break;
}
}
return BlockArr;
};
function shaarrblock2(Value1,Value2,BlockNum)
{
return shaarrblock(arr2(Value1, Value2), BlockNum);
};
if(typeof global === "object")
{
global.ReadUint32FromArr = ReadUint32FromArr;
global.ReadUintFromArr = ReadUintFromArr;
global.ReadUint16FromArr = ReadUint16FromArr;
global.WriteUintToArr = WriteUintToArr;
global.WriteUint32ToArr = WriteUint32ToArr;
global.WriteUint32ToArrOnPos = WriteUint32ToArrOnPos;
global.WriteUint16ToArrOnPos = WriteUint16ToArrOnPos;
global.WriteUintToArrOnPos = WriteUintToArrOnPos;
global.WriteArrToArr = WriteArrToArr;
global.WriteArrToArrOnPos = WriteArrToArrOnPos;
global.WriteArrToArrHOnPos = WriteArrToArrHOnPos;
global.ConvertBufferToStr = ConvertBufferToStr;
global.CopyObjValue = CopyObjValue;
global.CopyArr = CopyArr;
global.ParseNum = ParseNum;
global.CompareArr = CompareArr;
global.shaarr2 = shaarr2;
global.sha3arr2 = sha3arr2;
global.arr2 = arr2;
global.GetBlockArrFromBuffer = GetBlockArrFromBuffer;
global.shaarrblock2 = shaarrblock2;
}
else
if(typeof window === "object")
{
global = window;
}

View File

@ -0,0 +1,649 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var PayList = [];
var AttachItem;
var MapAccounts = {};
var LoadMapAfter = {};
var MapCheckTransaction = {};
var CanSendTransaction = 1;
var CurrentTR = {};
var MaxBlockNum = 0;
var WasAccountsDataStr;
function SetAccountsData(Data,AccountsDataStr)
{
if(!Data || !Data.result)
return ;
if(AccountsDataStr === WasAccountsDataStr)
return ;
WasAccountsDataStr = AccountsDataStr;
var arr = Data.arr;
var Select = $("idAccount");
if(arr.length !== Select.options.length)
{
var options = Select.options;
options.length = arr.length;
}
MaxBlockNum = GetCurrentBlockNumByTime();
SetGridData(arr, "grid_accounts", "idMyTotalSum");
for(var i = 0; arr && i < arr.length; i++)
{
var Item = arr[i];
Item.MyAccount = true;
var Num = ParseNum(Item.Num);
if(!MapAccounts[Num])
MapAccounts[Num] = {};
CopyObjKeys(MapAccounts[Num], Item);
var option = Select.options[i];
var StrText = GetAccountText(Item, Num, 1);
if(option.text !== StrText)
CheckNameAccTo();
option.value = Num;
option.text = StrText;
}
var CurentValue = LoadMapAfter["idAccount"];
if(CurentValue)
{
Select.value = CurentValue;
delete LoadMapAfter["idAccount"];
}
SetCurCurencyName();
};
function CurTransactionToForm(bForce)
{
var Item = $("idTransaction");
if(Item.className === "" || bForce)
Item.value = GetJSONFromTransaction(CurrentTR);
};
function CheckNameAccTo()
{
MaxBlockNum = GetCurrentBlockNumByTime();
var ToID = ParseNum($("idTo").value);
if(!MapAccounts[ToID] || (MapAccounts[ToID].MustUpdate && MapAccounts[ToID].MustUpdate >= MaxBlockNum))
{
GetData("GetAccountList", {StartNum:ToID}, function (Data)
{
if(Data && Data.result === 1 && Data.arr.length)
{
var Item = Data.arr[0];
Item.UpdateData = Date.now();
MapAccounts[Item.Num] = Item;
SetNameAccTo();
}
});
}
SetNameAccTo();
};
function SetNameAccTo()
{
var Str = "";
var ToID = ParseNum($("idTo").value);
var element = $("idNameTo");
var Item = MapAccounts[ToID];
var StrTo = "To: " + GetAccountText(Item, ToID, 1);
if(element.innerText !== StrTo)
{
element.innerText = StrTo;
if(Item && Item.MyAccount)
element.className = "smallbold";
else
element.className = "";
}
};
function GetAccountText(Item,Num,bGetSum)
{
if(Item)
{
var text = Item.Name;
if(!text || text.length === 0)
text = Num;
else
text = "" + Num + ". " + text;
if(bGetSum)
{
var StrSum = SUM_TO_STRING(Item.Value, Item.Currency);
text += " (" + StrSum + ")";
}
return text;
}
else
{
return Num;
}
};
function OnEditIdTo()
{
CheckNameAccTo();
OnEditTransactionFields();
};
function OnEditTransactionFields()
{
if(IsVisibleBlock("edit_transaction"))
CreateTransaction();
SetCurCurencyName();
SaveValues();
};
function SetCurCurencyName()
{
var Num = ParseNum($("idAccount").value);
var Item = MapAccounts[Num];
if(Item)
{
$("idCoinName").innerText = CurrencyName(Item.Currency);
}
};
function CreateTransaction(F,CheckErr,Run)
{
CheckNameAccTo();
CheckSending();
var FromID = ParseNum($("idAccount").value);
if(CheckErr && FromID === 0)
{
SetError("Select valid 'From account'");
return ;
}
var StrTo = $("idTo").value.trim();
var bFindAcc = 0;
var ToPubKey = "";
var ToID = ParseNum(StrTo);
if(StrTo !== "" + ToID)
{
if(StrTo.length === 66 && (StrTo.substr(0, 2) === "02" || StrTo.substr(0, 2) === "03") && IsHexStr(StrTo))
{
ToID = 0;
ToPubKey = StrTo;
if(ToPubKey === PubKeyStr)
bFindAcc = 1;
}
else
{
ToID = 0;
ToPubKey = "";
}
}
if(CheckErr && ToID <= 0 && ToPubKey === "" && !AttachItem)
{
SetError("Valid 'Pay to' - required!");
return ;
}
var Description = $("idDescription").value.substr(0, 200);
var StrSum = $("idSumSend").value;
var indDot = StrSum.indexOf(".");
if(indDot >= 0)
{
var StrTER = StrSum.substr(0, indDot);
var StrCENT = StrSum.substr(indDot + 1);
}
else
{
var StrTER = StrSum;
var StrCENT = "0";
}
StrCENT = StrCENT + "000000000";
var Coin = {SumCOIN:ParseNum(StrTER), SumCENT:ParseNum(StrCENT.substr(0, 9))};
var OperationID = 0;
var Item = MapAccounts[FromID];
if(Item)
{
OperationID = Item.Value.OperationID;
}
var AttachBody = [];
if(AttachItem)
{
AttachBody = AttachItem.Data.Body;
if(!AttachBody)
AttachBody = [];
}
var ToPubKeyArr = [];
if(ToPubKey)
ToPubKeyArr = GetArrFromHex(ToPubKey);
var TR = {Type:111, Version:3, Reserve:0, FromID:FromID, OperationID:OperationID, To:[{PubKey:ToPubKeyArr, ID:ToID, SumCOIN:Coin.SumCOIN,
SumCENT:Coin.SumCENT}], Description:Description, Body:AttachBody, Sign:CurrentTR.Sign, };
Object.defineProperties(TR, {bFindAcc:{configurable:true, writable:true, enumerable:false, value:bFindAcc}});
Object.defineProperties(TR, {Run:{configurable:true, writable:true, enumerable:false, value:Run}});
if(JSON.stringify(TR) === JSON.stringify(CurrentTR))
{
if(F)
F(CurrentTR);
return ;
}
CurrentTR = TR;
GetSignTransaction(TR, "", function (TR)
{
CurTransactionToForm(true);
if(F)
F(TR);
});
};
function SignJSON(F)
{
if($("idSignJSON").disabled)
return ;
var TR = GetTransactionFromJSON();
if(!TR)
return ;
CurrentTR = TR;
GetSignTransaction(TR, "", function (TR)
{
CurTransactionToForm(true);
if(F)
F();
});
};
function CheckSending(bToStatus)
{
MaxBlockNum = GetCurrentBlockNumByTime();
var CanSend = IsPrivateMode();
var StrButton = "Send";
var StrButtonSign = "Sign JSON";
if(!CanSend)
{
StrButton = " ";
StrButtonSign = " ";
}
if(CanSend)
{
var FromID = ParseNum($("idAccount").value);
var Item = MapAccounts[FromID];
if(Item && Item.NextSendTime && Item.NextSendTime > MaxBlockNum)
{
if(bToStatus)
SetStatus("Transaction was sending. Wait... (" + Item.LastTransactionText + ")");
CanSend = false;
StrButton = "Wait...";
}
}
$("idSendButton").disabled = (!CanSend);
$("idSendButton").value = StrButton;
$("idSignJSON").disabled = (!CanSend);
$("idSignJSON").value = StrButtonSign;
return CanSend;
};
function AddWhiteList()
{
var ToID = ParseNum($("idTo").value);
if(ToID && $("idWhiteOnSend").checked)
localStorage["White:" + ToID] = 1;
};
function SendMoneyBefore()
{
if($("idSendButton").disabled)
return ;
var ToID = ParseNum($("idTo").value);
var Item = MapAccounts[ToID];
if(localStorage["White:" + ToID] || !$("idSumSend").value || Item && Item.MyAccount)
{
SendMoney();
}
else
{
var StrTo = " to " + GetAccountText(Item, ToID);
$("idWhiteOnSend").checked = 0;
$("idOnSendText").innerText = "" + $("idSumSend").value + " " + $("idCoinName").innerText + StrTo;
SetVisibleBlock("idBlockOnSend", 1);
SetImg(this, 'idBlockOnSend');
}
};
function SendMoney2()
{
AddWhiteList();
SendMoney();
};
function SendMoney()
{
if(!CanSendTransaction)
{
SetError("Can't Send transaction");
return ;
}
CheckSending(true);
if($("idSendButton").disabled)
return ;
SetVisibleBlock("idBlockOnSend", 0);
CreateTransaction(SendMoneyTR, true, ClearAttach);
};
function GetJSONFromTransaction(TR)
{
var TR2 = JSON.parse(JSON.stringify(TR));
for(var i = 0; i < TR2.To.length; i++)
{
var Item = TR2.To[i];
Item.PubKey = GetHexFromArr(Item.PubKey);
}
TR2.Body = GetHexFromArr(TR2.Body);
TR2.Sign = GetHexFromArr(TR2.Sign);
var Str = JSON.stringify(TR2, "", 4);
return Str;
};
function GetTransactionFromJSON()
{
var Str = $("idTransaction").value;
try
{
var TR = JSON.parse(Str);
}
catch(e)
{
SetError(e);
return undefined;
}
for(var i = 0; i < TR.To.length; i++)
{
var Item = TR.To[i];
Item.PubKey = GetArrFromHex(Item.PubKey);
if(Item.SumTER && Item.SumCOIN === undefined)
{
Item.SumCOIN = Item.SumTER;
delete Item.SumTER;
}
}
TR.Body = GetArrFromHex(TR.Body);
TR.Sign = GetArrFromHex(TR.Sign);
return TR;
};
function SendMoneyJSON()
{
if(!CanSendTransaction)
{
SetError("Can't Send transaction");
return ;
}
var TR = GetTransactionFromJSON();
if(!TR)
return ;
SendMoneyTR(TR);
};
function SignAndSendFromJSON()
{
SignJSON(SendMoneyJSON);
};
function GetTransactionText(TR,key)
{
var Str;
if(TR)
{
if(TR.Type === TYPE_TRANSACTION_CREATE)
{
Str = "New account " + TR.Name.substr(0, 20);
}
else
if(TR.Type === 111)
{
var MapItem = {};
var ValueTotal = {SumCOIN:0, SumCENT:0};
Str = "" + TR.FromID + "/" + TR.OperationID + " to ";
for(var i = 0; i < TR.To.length; i++)
{
var Item = TR.To[i];
if(Item.ID === TR.FromID || MapItem[Item.ID])
continue;
MapItem[Item.ID] = 1;
ADD(ValueTotal, Item);
if(i === 0)
Str += "[";
if(Str.length < 16)
{
if(i > 0)
Str += ",";
if(Item.ID || (Item.PubKey && Item.PubKey.length !== 66))
Str += Item.ID;
else
Str += GetHexFromArr(Item.PubKey).substr(0, 8);
}
else
if(Str.substr(Str.length - 1) !== ".")
Str += "...";
}
Str += "] " + SUM_TO_STRING(ValueTotal);
Str += " " + (TR.Description.substr(0, 20)).replace(/\n/g, "");
}
}
else
{
if(key)
Str = key;
else
Str = "";
}
return Str;
};
function SendMoneyTR(TR)
{
var Body = GetArrFromTR(TR);
WriteArr(Body, TR.Sign, 64);
Body.length += 12;
SendTransaction(Body, TR, undefined, function (Err,TR,Body)
{
if(Err)
return ;
var Item = MapAccounts[TR.FromID];
if(Item)
{
var key = GetHexFromArr(sha3(Body));
var BlockNum = GetCurrentBlockNumByTime();
Item.LastTransactionText = GetTransactionText(TR);
Item.NextSendTime = BlockNum + 10;
MapCheckTransaction[key] = Item;
CheckSending();
}
});
};
function ClearTransaction()
{
PayList = [];
ClearAttach();
CheckSendList(1);
var arr = ["idAccount", "idTo", "idSumSend", "idDescription"];
for(var i = 0; i < arr.length; i++)
{
$(arr[i]).value = "";
}
SaveValues();
CreateTransaction();
};
function StartEditTransactionJSON()
{
var Item = $("idTransaction");
Item.className = "smallbold";
};
function EditJSONTransaction()
{
var name = "edit_transaction";
var Item = $("idTransaction");
if(IsVisibleBlock(name))
{
SetVisibleBlock(name, false);
Item.className = "";
}
else
{
CreateTransaction();
SetVisibleBlock(name, true);
Item.className = "";
}
};
var glNumPayCount = 0;
function GetInvoiceHTML(item,onclick,classstr)
{
if(!item.num)
{
glNumPayCount++;
item.num = glNumPayCount;
}
var idname = "idSendInvoice" + item.num;
var value = "";
if(item.Data.Amount)
value += "<B>" + item.Data.Amount + "</B> Tera";
else
value += "<B style='color:green'>No pay</B>";
value += "&#x00A;" + item.num + ". " + item.Data.name;
return "<button id='" + idname + "' onclick='" + onclick + "' class='" + classstr + "'>" + value + "</button>";
};
function AddSendList(item)
{
PayList.push({Data:item});
};
function CheckSendList(bRedraw)
{
TitleWarning = PayList.length;
if(AttachItem)
TitleWarning++;
var Str = localStorage["InvoiceList"];
if(!Str && !bRedraw)
return ;
if(!bRedraw)
{
SelectTab("TabSend");
}
if(Str)
{
var arr = JSON.parse(Str);
for(var i = 0; i < arr.length; i++)
{
AddSendList(arr[i]);
}
localStorage["InvoiceList"] = "";
}
var idList = $("idSendList");
if(PayList.length)
{
idList.innerHTML = "<DIV id='PaiListInfo'>Select the item you want to sign (pay) and send to blockchain:</DIV>";
for(var i = 0; i < PayList.length; i++)
{
var item = PayList[i];
idList.innerHTML += GetInvoiceHTML(item, "UseInvoice(" + i + ")", "btinvoice");
}
if(AttachItem === undefined)
UseInvoice(0);
}
else
{
idList.innerHTML = "";
}
};
setInterval(CheckSendList, 200);
function UseInvoice(Num)
{
var item = PayList[Num];
if(item.Data.From)
$("idAccount").value = item.Data.From;
$("idTo").value = item.Data.To;
$("idSumSend").value = item.Data.Amount;
$("idDescription").value = item.Data.Description;
PayList.splice(Num, 1);
AttachItem = item;
$("idAttach").innerHTML = GetInvoiceHTML(AttachItem, "OpenAttach()", "btinvoice btinvoice_use");
CheckSendList(1);
};
function ClearAttach()
{
AttachItem = undefined;
$("idAttach").innerHTML = "";
};
function OpenAttach()
{
if(AttachItem)
{
var Data2 = JSON.parse(JSON.stringify(AttachItem.Data));
if(Data2.Body)
Data2.Body = GetHexFromArr(Data2.Body);
delete Data2.TransferSecret;
alert("DATA:\n" + JSON.stringify(Data2, "", 4));
}
};
function SendTrCreateAcc(Currency,PubKey,Description,Adviser,Smart,bFindAcc,bAddToPay)
{
var TR = GetTrCreateAcc(Currency, PubKey, Description, Adviser, Smart);
var Body = GetBodyCreateAcc(TR);
TR.bFindAcc = 1;
if(bAddToPay)
{
var Item = {name:Description, To:0, Amount:CONFIG_DATA.PRICE_DAO.NewAccount, Description:"Create acc: " + Description, Body:Body,
};
AddToInvoiceList(Item);
}
else
{
SendTransaction(Body, TR, MIN_POWER_POW_ACC_CREATE);
}
$("idAccountName").value = "";
CancelCreateAccount();
};
function ChangeSmart(NumAccount,WasSmart)
{
if(!IsPrivateMode())
{
SetError("Pls, open wallet");
return 0;
}
var Result = prompt("Enter smart number:", WasSmart);
if(Result !== null && Result != WasSmart)
{
var Smart = parseInt(Result);
var OperationID = 0;
var Item = MapAccounts[NumAccount];
if(Item)
{
OperationID = Item.Value.OperationID;
}
var TR = {Type:140, Account:NumAccount, Smart:Smart, FromNum:NumAccount, Reserve:[], OperationID:OperationID, Sign:"", };
var Body = [];
WriteByte(Body, TR.Type);
WriteUint(Body, TR.Account);
WriteUint32(Body, TR.Smart);
WriteArr(Body, TR.Reserve, 10);
WriteUint(Body, TR.FromNum);
WriteUint(Body, TR.OperationID);
SendTrArrayWithSign(Body, TR.Account, TR);
}
};
function CheckLengthAccDesription(name,Length)
{
var Str = $(name).value.substr(0, Length + 1);
var arr = toUTF8Array(Str);
var Len = Length - arr.length;
if(Len < 0)
SetError("Bad length");
else
SetStatus("Lost: " + Len + " bytes");
};

View File

@ -0,0 +1,512 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
function SavePrivateKey()
{
var Select = document.getElementById("idTypeKey");
if(Select.value === "brain")
{
ConvertToPrivateKey();
return ;
}
var Str = document.getElementById("idKeyNew").value;
Str = Str.trim();
if(Select.value === "private" && (Str.length !== 64 || !IsHexStr(Str)))
{
SetError("Error: Length must 64 HEX chars. (Length=" + Str.length + ")");
return ;
}
else
if(Select.value !== "private" && (Str.length !== 66 || Str.substr(0, 1) !== "0" || !IsHexStr(Str)))
{
SetError("Error: Length must 66 HEX chars. (Length=" + Str.length + ")");
return ;
}
if(Select.value === "private" && PrivKeyStr !== Str)
SetStatus("Changed privat key");
else
if(Select.value === "public" && PubKeyStr !== Str)
SetStatus("Changed public key");
GetData("SetWalletKey", Str, function (Data)
{
if(Data && Data.result === 1)
{
if(Select.value === "private")
SelectStyle("styleBlue");
else
if(Select.value === "public")
SelectStyle("styleGreen");
SetVisibleEditKeys(0);
UpdatesData();
}
});
};
function CreateCheckPoint()
{
if(!ServerBlockNumDB || ServerBlockNumDB < 16)
{
SetError("Not set ServerBlockNumDB");
return ;
}
var BlockNum = ServerBlockNumDB - 10;
SetCheckPoint(BlockNum);
};
function UseAutoCheckPoint()
{
var Set = $("idUseAutoCheckPoint").checked;
var Period = ParseNum($("idPeriodAutoCheckPoint").value);
GetData("SetAutoCheckPoint", {Set:Set, Period:Period}, function (Data)
{
if(Data)
{
SetStatus(Data.text, !Data.result);
}
});
};
function UseAutoCorrTime()
{
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function (Data)
{
if(Data)
{
SetStatus(Data.text, !Data.result);
}
});
};
function SetCodeVersion()
{
var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION));
if(!Data.BlockNum)
{
Data.LevelUpdate = 160;
}
Data.BlockNum = CONFIG_DATA.CurBlockNum;
Data.addrArr = GetHexFromArr(Data.addrArr);
Data.Hash = GetHexFromArr(Data.Hash);
Data.Sign = GetHexFromArr(Data.Sign);
Data.Hash = undefined;
Data.Sign = undefined;
Data.StartLoadVersionNum = undefined;
var Str = JSON.stringify(Data, "", 2);
document.getElementById("idDevService").value = Str;
};
function SetNewCodeVersion()
{
try
{
var Data = JSON.parse(document.getElementById("idDevService").value);
}
catch(e)
{
SetError("Error format setting data");
return ;
}
Data.addrArr = GetArrFromHex(Data.addrArr);
GetData("SetNewCodeVersion", Data, function (Data)
{
if(Data)
{
SetStatus(Data.text, !Data.result);
}
});
};
function SetCorrTime()
{
var AutoDelta = parseInt(document.getElementById("idDevValue").value);
var Data = {Num:CONFIG_DATA.CurBlockNum, bUse:1, bAddTime:1};
if(AutoDelta < 0)
{
AutoDelta = - AutoDelta;
Data.bAddTime = 0;
}
Data.DeltaTime = 40;
Data.StartBlockNum = ServerCurBlockNum + 10;
Data.EndBlockNum = Data.StartBlockNum + Math.floor(AutoDelta / Data.DeltaTime);
var Str = JSON.stringify(Data, "", 2);
document.getElementById("idDevService").value = Str;
};
function StartTimeCorrect()
{
try
{
var Data = JSON.parse(document.getElementById("idDevService").value);
}
catch(e)
{
SetError("Error format setting data");
return ;
}
GetData("SetCheckDeltaTime", Data, function (Data)
{
if(Data)
{
SetStatus(Data.text, !Data.result);
}
});
};
function RestartNode()
{
GetData("RestartNode", {});
DoRestartWallet();
};
function UseAutoUpdate()
{
var Data = {USE_AUTO_UPDATE:document.getElementById("idAutoUpdate").checked, DoMining:1};
GetData("SaveConstant", Data, function (Data)
{
if(Data && Data.result)
{
SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked);
}
});
};
function UseMining()
{
if(!MiningAccount)
{
SetError("Not set mining account");
return ;
}
var Data = {USE_MINING:document.getElementById("idUseMining").checked, DoMining:1};
GetData("SaveConstant", Data, function (Data)
{
if(Data && Data.result)
{
SetStatus("Save Mining: " + document.getElementById("idUseMining").checked);
}
});
};
function SetPercentMining()
{
var Data = {POW_MAX_PERCENT:document.getElementById("idPercentMining").value};
GetData("SaveConstant", Data, function (Data)
{
if(Data && Data.result)
{
SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %");
}
});
};
function MiningSets()
{
var name = "edit_mining_set";
if(IsVisibleBlock(name))
{
SetVisibleBlock(name, false);
}
else
{
SetVisibleBlock(name, true);
document.getElementById("idMiningAccount").value = MiningAccount;
document.getElementById("idMiningAccount").focus();
}
};
function SaveMiningSet(Value)
{
SetVisibleBlock("edit_mining_set", false);
if(Value)
{
MiningAccount = Value;
}
else
{
MiningAccount = ParseNum(document.getElementById("idMiningAccount").value);
}
GetData("SetMining", MiningAccount, function (Data)
{
});
};
function CancalMiningSet()
{
var name = "edit_mining_set";
SetVisibleBlock(name, false);
};
var WasHistoryMaxNum;
var WasLastNumSound = 0;
function CheckNewMoney()
{
if(!$("idUseSoundHistory").checked)
return ;
if(WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
return ;
WasHistoryMaxNum = HistoryMaxNum;
GetData("GetHistoryAct", {StartNum:HistoryMaxNum - 40, CountNum:40}, function (Data)
{
if(Data && Data.result)
{
var arr = Data.arr;
for(var i = 0; i < arr.length; i++)
{
var Item = arr[i];
if(Item.Direct === "+" && Item.BlockNum > ServerBlockNumDB - 60 && Item.BlockNum < ServerBlockNumDB - 20 && Item.BlockNum > WasLastNumSound)
{
WasLastNumSound = Item.BlockNum;
$("sound_coin").play();
}
}
}
});
};
function DoRestartWallet()
{
SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>");
if(!WasSetRestart)
{
WasSetRestart = 1;
setTimeout(function ()
{
window.location.reload();
}, 10 * 1000);
}
};
function SetArrLog(arr)
{
var Str = "";
var bFindAccount = 0;
for(var i = 0; i < arr.length; i++)
{
var Item = arr[i];
var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16));
var info = Item.text;
if(tr_text)
info += " (" + tr_text + ")";
if(Item.final)
{
var TR = MapSendTransaction[Item.key];
if(TR)
{
if(Item.text.indexOf("Add to blockchain") >= 0)
{
if(TR.bFindAcc)
{
bFindAccount = 1;
TR.bFindAcc = 0;
}
if(TR.Run)
{
TR.Run(TR);
TR.Run = undefined;
}
}
}
var Account = MapCheckTransaction[Item.key];
if(Account)
{
delete MapCheckTransaction[Item.key];
Account.NextSendTime = 0;
}
}
Str = Str + info + "\n";
}
SetStatusFromServer(Str);
CheckSending();
if(bFindAccount)
{
FindMyAccounts();
}
};
function SetAutoMining()
{
setTimeout(function ()
{
var Select = $("idAccount");
if(Select.options.length)
{
SaveMiningSet(Select.options[Select.options.length - 1].value);
}
}, 100);
};
function ViewNetworkMode()
{
if(IsVisibleBlock('idNetworkView'))
{
SetVisibleBlock('idNetworkView', false);
}
else
{
SetVisibleBlock('idNetworkView', true);
var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE;
if(!Mode)
{
Mode = {};
Mode.UseDirectIP = true;
if(INTERNET_IP_FROM_STUN)
Mode.ip = INTERNET_IP_FROM_STUN;
else
Mode.ip = SERVER_IP;
Mode.port = SERVER_PORT;
}
document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP;
document.getElementById("idIP").value = Mode.ip;
document.getElementById("idPort").value = Mode.port;
if(!Mode.NodeWhiteList)
Mode.NodeWhiteList = "";
document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList;
}
};
function SetNetworkParams(bRestart)
{
var Mode = {};
Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked;
Mode.ip = document.getElementById("idIP").value;
Mode.port = ParseNum(document.getElementById("idPort").value);
Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value;
Mode.DoRestartNode = bRestart;
GetData("SetNetMode", Mode, function (Data)
{
if(Data && Data.result)
{
SetStatus("Set net work params OK");
SetVisibleBlock('idNetworkView', false);
}
});
if(bRestart)
DoRestartWallet();
};
function ViewConstant()
{
if(IsVisibleBlock('idConstantView'))
{
SetVisibleBlock('idConstantView', false);
}
else
{
SetVisibleBlock('idConstantView', true);
document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2);
}
};
function SaveConstant(bRestart)
{
try
{
var Data = JSON.parse(document.getElementById("idConstant").value);
}
catch(e)
{
SetError("Error JSON format setting constant");
return ;
}
Data.DoRestartNode = bRestart;
GetData("SaveConstant", Data, function (Data)
{
if(Data && Data.result)
{
SetStatus("Save Constant OK");
SetVisibleBlock('idConstantView', false);
}
});
if(bRestart)
DoRestartWallet();
};
function ViewRemoteParams()
{
if(IsVisibleBlock('idRemoteView'))
{
SetVisibleBlock('idRemoteView', false);
}
else
{
SetVisibleBlock('idRemoteView', true);
if(CONFIG_DATA.HTTPPort)
document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort;
document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword;
}
};
function SetRemoteParams(bRestart)
{
var PrevHTTPPassword = HTTPPassword;
var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value);
var HTTPPassword = document.getElementById("idHTTPPassword").value;
GetData("SetHTTPParams", {HTTPPort:HTTPPort, HTTPPassword:HTTPPassword, DoRestartNode:bRestart}, function (Data)
{
if(!PrevHTTPPassword && HTTPPassword)
window.location.reload();
else
{
SetVisibleBlock('idRemoteView', false);
SetStatus("Set HTTP params OK");
}
});
if(bRestart)
DoRestartWallet();
};
function RewriteAllTransactions()
{
DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0);
};
function RewriteTransactions()
{
DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1);
};
function TruncateBlockChain()
{
DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1);
};
function ClearDataBase()
{
DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0);
};
function CleanChain()
{
DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1);
};
function DoBlockChainProcess(FuncName,Text,LastBlock)
{
SaveValues();
var Params = {};
if(LastBlock)
{
Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value);
Text = Text.replace("%1", Params.BlockCount);
}
var result = confirm(Text + "?");
if(!result)
return ;
SetVisibleBlock("idServerBlock", 1);
SetStatus("START: " + Text);
GetData(FuncName, Params, function (Data)
{
if(Data)
{
SetStatus("FINISH: " + Text, !Data.result);
}
});
};

View File

@ -0,0 +1,246 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
*/
var MIN_VERSION = 868;
var COUNT_BLOCK_PROOF = 300;
var MIN_SUM_POWER = COUNT_BLOCK_PROOF * 35;
var MainServer = undefined;
var MaxConnectedCount = 10;
var MaxTimeConnecting = 3 * 1000;
var StartTimeConnecting = 0;
var ConnectedCount = 0;
var NETWORK = "TERA-MAIN";
var ServerMap = {};
var ServerMainMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"}, "terafoundation.org":{"ip":"terafoundation.org",
"port":443, "Name":"TERA", "System":1}, "91.235.136.81":{"ip":"91.235.136.81", "port":80, "Name":"SUPPORT1", "System":1}, "dappsgate.com":{"ip":"dappsgate.com",
"port":80, "Name":"SUPPORT2", "System":1}, };
var ServerTestMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"}, "91.235.136.81":{"ip":"91.235.136.81", "port":88,
"Name":"SUPPORT1", "System":1}, "dappsgate.com":{"ip":"dappsgate.com", "port":88, "Name":"SUPPORT2", "System":1}, };
function StartWebWallet()
{
if(NETWORK === "TERA-TEST")
{
MIN_SUM_POWER = 0;
ServerMap = ServerTestMap;
}
else
{
MIN_SUM_POWER = COUNT_BLOCK_PROOF * 35;
ServerMap = ServerMainMap;
}
$("idNetwork").innerText = NETWORK;
OnInitWebWallet();
ConnectWebWallet();
};
function OnInitWebWallet()
{
var str = localStorage.getItem(NETWORK + "NodesArrayList");
if(str)
{
var arr = JSON.parse(str);
for(var i = 0; i < arr.length; i++)
{
var Item = ServerMap[arr[i].ip];
if(Item && Item.System)
continue;
ServerMap[arr[i].ip] = arr[i];
}
}
};
function SaveServerMap()
{
var arr = [];
for(var key in ServerMap)
{
var Item = ServerMap[key];
if(Item.SumPower >= MIN_SUM_POWER)
{
arr.push({ip:Item.ip, port:Item.port});
}
}
localStorage.setItem(NETWORK + "NodesArrayList", JSON.stringify(arr));
};
function SetStatus(Str)
{
var id = $("idStatus");
id.innerHTML = Str;
console.log(id.innerText);
};
function SetError(Str,bNoSound)
{
SetStatus("<DIV align='left' style='color:red'><B>" + Str + "</B></DIV>");
};
function ConnectWebWallet()
{
StartTimeConnecting = Date.now();
ConnectedCount = 0;
for(var key in ServerMap)
{
var Item = ServerMap[key];
Item.SendHandShake = 0;
}
SetStatus("Connecting...");
LoopHandShake();
setTimeout(LoopWalletInfo, 1500);
};
var Stage = 0;
function LoopHandShake()
{
Stage++;
SetStatus("Connecting: " + Stage + "...");
for(var key in ServerMap)
{
var Item = ServerMap[key];
if(Item.SendHandShake || !Item.port)
continue;
DoNodeList(Item);
}
};
function DoNodeList(Item)
{
if(window.location.protocol === "https:" && Item.port !== 443)
return ;
if(Item.port === 443 && IsIPAddres(Item.ip))
return ;
Item.SendHandShake = 1;
GetData(GetProtocolServerPath(Item) + "/GetNodeList", {}, function (Data)
{
if(Data && Data.result && Data.BlockChain && Data.VersionNum >= MIN_VERSION)
{
ConnectedCount++;
Item.GetHandShake = 1;
Item.BlockChain = Data.BlockChain;
var bWas = 0;
for(var i = 0; i < Data.arr.length; i++)
{
var Node = Data.arr[i];
if(!ServerMap[Node.ip] && Node.port)
{
ServerMap[Node.ip] = Node;
bWas = 1;
}
}
if(bWas && ConnectedCount < MaxConnectedCount && new Date() - StartTimeConnecting < MaxTimeConnecting)
{
setTimeout(LoopHandShake, 100);
}
}
});
};
function LoopWalletInfo()
{
SetStatus("Get wallets info...");
for(var key in ServerMap)
{
var Item = ServerMap[key];
if(Item.port)
{
DoWalletInfo(Item);
}
}
setTimeout(FindLider, 500);
};
function DoWalletInfo(Item)
{
if(window.location.protocol === "https:" && Item.port !== 443)
return ;
if(Item.port === 443 && IsIPAddres(Item.ip))
return ;
Item.StartTime = Date.now();
Item.SendWalletInfo = 1;
GetData(GetProtocolServerPath(Item) + "/GetCurrentInfo", {BlockChain:1}, function (Data)
{
if(Data && Data.result && Data.BlockChain && Data.NETWORK === NETWORK)
{
Item.Name = Data.NODES_NAME;
Item.GetWalletInfo = 1;
Item.DeltaTime = new Date() - Item.StartTime;
Item.BlockChain = Data.BlockChain;
Item.MaxNumBlockDB = Data.MaxNumBlockDB;
console.log("Get: " + Item.ip + ":" + Item.port + " delta=" + Item.DeltaTime);
}
});
};
function FindLider()
{
MainServer = undefined;
var Arr = [];
var MapSumPower = {};
for(var key in ServerMap)
{
var Item = ServerMap[key];
if(Item.GetWalletInfo && Item.BlockChain)
{
var arr = Item.BlockChain;
if(arr.data)
arr = arr.data;
Item.SumPower = CalcPowFromBlockChain(arr);
if(Item.SumPower < MIN_SUM_POWER)
{
console.log("Skip: " + Item.ip + ":" + Item.port + " SumPower(" + Item.SumPower + ") < MIN_SUM_POWER(" + MIN_SUM_POWER + ")");
continue;
}
if(!MapSumPower[Item.SumPower])
MapSumPower[Item.SumPower] = 0;
MapSumPower[Item.SumPower]++;
Arr.push(Item);
}
}
var Max = 0, MaxKey;
for(var key in MapSumPower)
{
if(MapSumPower[key] >= Max)
{
Max = MapSumPower[key];
MaxKey = parseInt(key);
}
}
Arr.sort(function (a,b)
{
return a.DeltaTime - b.DeltaTime;
});
for(var i = 0; i < Arr.length; i++)
{
var Item = Arr[i];
if(Item.SumPower === MaxKey)
{
SetStatus("Find " + Item.ip + ":" + Item.port + " with pow=" + Item.SumPower + " " + Max + " ping=" + Item.DeltaTime);
MainServer = Item;
SaveServerMap();
break;
}
}
OnFindServer();
};
function CalcPowFromBlockChain(BufRead)
{
var Sum = 0;
var Arr = GetBlockArrFromBuffer(BufRead);
if(Arr.length === COUNT_BLOCK_PROOF)
{
for(var i = 0; i < Arr.length; i++)
{
Sum += Arr[i].Power;
}
}
return Sum;
};

BIN
Source/HTML/PIC/chains.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
Source/HTML/PIC/console.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
Source/HTML/PIC/dapp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Source/HTML/PIC/down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
Source/HTML/PIC/invoice.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Source/HTML/PIC/key.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
Source/HTML/PIC/monitor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
Source/HTML/PIC/network.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Source/HTML/PIC/smart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
Source/HTML/PIC/table.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

BIN
Source/HTML/PIC/tera.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
Source/HTML/PIC/up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
Source/HTML/PIC/viewer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
Source/HTML/PIC/wallet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

BIN
Source/HTML/SOUND/click.mp3 Normal file

Binary file not shown.

BIN
Source/HTML/SOUND/coin.mp3 Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,110 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Block</title>
<link rel="shortcut icon" href="/HTML/PIC/viewer.png" type="image/png">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/buttons.css">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/style.css">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/wallet.css">
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="../HTML/JS/client.js"></script>
<script>
var CountViewRows=10;
var DefTr={NumName:"idViewTrNum", TabName:"grid_transaction_all",APIName:"GetTransactionAll",Param3:undefined};
window.onload=function()
{
document.body.className="univers "+localStorage["idSelStyle"];
var i=document.URL.indexOf("#");
if(i>0)
{
var BlockNum=ParseNum(document.URL.substr(i+1));
ViewBlock(BlockNum);
}
window.onkeydown = function (e)
{
if(e.keyCode===27)
{
window.close();
}
};
}
function ViewBlock(BlockNum)
{
if(BlockNum)
document.getElementById("idViewBlockNum").value=BlockNum;
else
BlockNum=ParseNum(document.getElementById("idViewBlockNum").value);
document.title="Block: "+BlockNum;
DefTr.Param3=BlockNum;
ViewCurrent(DefTr);
}
function SaveValues()
{
}
</script>
</head>
<body>
<DIV align='center'>
<DIV id="idTransactionBlock" style="display: block">
<BR>
<DIV class="header_tr" >Transactions on block: <INPUT type="number" id="idViewBlockNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewBlock()"> </DIV>
<BR>
<!--<INPUT type="button" onclick="ViewPrev(DefBlock)" class="btdoit bt" value="<< Prev">-->
<!--<INPUT type="number" id="idViewBlockNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefBlock)">-->
<!--<INPUT type="button" onclick="ViewNext(DefBlock,MaxBlockNum-8)" class="btdoit bt" value="Next >>">-->
<INPUT type="button" onclick="ViewPrev(DefTr)" class="btdoit bt" value="<< Prev">
<INPUT type="number" id="idViewTrNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefTr)">
<INPUT type="button" onclick="ViewNext(DefTr,5000)" class="btdoit bt" value="Next >>">
<table id="grid_transaction_all" class="grid">
<tr>
<th id="Item.Num" class="num">TrNum</th>
<th id="Item.Type" class="num">Type</th>
<th id="GetHexFromArr(Item.Body)" class="code">Body</th>
<th id="(escapeHtml(Item.Script))" class="code2">JSON</th>
<th id="GetHexFromArr(Item.HASH)" class="code">HASH</th>
<th id="Item.Length" class="num">Bytes</th>
<th id="Item.power" class="num">Power</th>
<th id="(Item.VerifyHTML)" class="verify">Verify</th>
</tr>
</table>
<INPUT type="button" onclick="ViewPrev(DefTr)" class="btdoit bt" value="<< Prev">
<INPUT type="button" onclick="ViewNext(DefTr,5000)" class="btdoit bt" value="Next >>">
</DIV>
</DIV>
<DIV id="idStableScroll">
@terafoundation
<!--progr76@gmail.com-->
</DIV>
</body>
</html>

1457
Source/HTML/chains.html Normal file

File diff suppressed because it is too large Load Diff

501
Source/HTML/console.html Normal file
View File

@ -0,0 +1,501 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Console</title>
<link rel="shortcut icon" href="/HTML/PIC/console.png" type="image/png">
<link rel="stylesheet" type="text/css" href="/HTML/CSS/buttons.css">
<link rel="stylesheet" type="text/css" href="/HTML/CSS/style.css">
</head>
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="/HTML/JS/client.js"></script>
<script type="text/javascript" src="/HTML/JS/sha3.js"></script>
<script type="text/javascript" src="/HTML/JS/crypto-client.js"></script>
<script type="text/javascript" src="/HTML/JS/terahashlib.js"></script>
<script>
function SetStatus(Str)
{
var id = $("status");
id.innerHTML=Str;
}
function SetStatus2(Str)
{
var id = $("status2");
id.innerHTML=Str;
}
function UpdateData()
{
GetData("GetWalletInfo",{}, function (Data)
{
if(Data && Data.result)
{
SetBlockChainConstant(Data);
}
});
}
///////////////////
var CodeList={};
var CurRowName;
function SetConsoleText(bRun)
{
//SaveToList();
var Name = $("idConsoleIndex").value;
$("idName").value=Name;
CurRowName=Name;
var Code=CodeList[Name];
$("idConsoleText").value=Code;
if(bRun)
SendToServer();
}
function SetAndRun()
{
SetConsoleText(1);
}
function NewRow()
{
CurRowName=undefined;
$("idName").value="";
}
function SaveToList(bUpdate)
{
var Name = $("idName").value;
if(CurRowName)
{
SetNameInSelect(Name);
delete CodeList[CurRowName];
}
if(Name)
CodeList[Name]=$("idConsoleText").value;
if(bUpdate)
{
SaveArrToSelect(Name);
}
CurRowName=Name;
SaveValues();
}
function SetNameInSelect(Name)
{
var Select=document.getElementById("idConsoleIndex");
for(var i=0;i<Select.options.length;i++)
if(Select.options[i]===CurRowName)
{
if(Name)
{
Select.options[i].value=Name;
Select.options[i].text=Name;
}
else
{
Select.options[i] = null;
}
}
}
function SaveArrToSelect(CurrName)
{
var Select=document.getElementById("idConsoleIndex");
Select.options.length=0;
for(var Name in CodeList)
{
Select.options[Select.options.length]=new Option(Name,Name,false,(Name===CurrName));
}
}
///////////////////
function OnSelectTypeCode()
{
var Type = $("idConsoleSend").value;
if(Type==="ECode")
{
$("idBtRun").value="Send eval";
}
else
if(Type==="HEX")
{
$("idBtRun").value="Send transaction";
}
else
{
$("idBtRun").value="Run";
}
}
function SendToServer()
{
SaveValues();
var Value = $("idConsoleText").value;
var Type = $("idConsoleSend").value;
if(Type==="ECode")
{
SendECode(Value);
}
else
if(Type==="HEX")
{
SendHEXTransaction(Value);
}
else
if(Type==="ServerCode")
{
SendServerCode(Value);
}
else
{
RunClientCode(Value);
}
}
function RunClientCode(Value)
{
SetStatus("");
var Result;
try
{
Result=eval(Value);
}
catch (e)
{
Result=e;
}
ToResult(Result);
}
function SendServerCode(Value)
{
var bProcessTX = $("idProcessTX").checked;
SetStatus("");
GetData("SendDirectCode",{Code:Value,TX:bProcessTX }, function (Data)
{
if(Data)
{
ToResult(Data.text);
}
});
}
function SendHEXTransaction(Value)
{
var Body=GetArrFromHex(Value);
if(Body.length<32)
{
SetStatus("Error length HEX transaction");
return;
}
Body.length+=12;
SendTransaction(Body);
}
var AllSend=0;
var AllNoSend=0;
var MustSend=0;
var LastErr="";
var LastOK="";
function SendECode(Code)
{
var DeltaBlockNum = parseInt($("idConsoleDeltaBlockNum").value);
// if($("idSendAll").checked)
// {
// var Data={DeltaBlockNum:DeltaBlockNum,Code:Code,All:1};
// GetData("SendECode",Data, function (Data)
// {
// if(Data)
// {
// ToResult(Data.text);
// }
// });
// return;
// }
var Addr = $("idNode").value;
AllSend=0;
AllNoSend=0;
MustSend=0;
LastErr="";
LastOK="";
var arr=Addr.split("\n");
for(var i=0;i<arr.length;i++)
{
var CurAddr=arr[i].trim();
if(CurAddr.length!==64)
continue;
MustSend++;
var Data={DeltaBlockNum:DeltaBlockNum,Code:Code,Addr:CurAddr};
GetData("SendECode",Data, function (Data)
{
if(Data && Data.result===1)
{
AllSend++;
LastOK=Data.text;
}
else
{
AllNoSend++;
LastErr=Data.text;
}
ToResult("OK:"+AllSend+" ("+LastOK+") NO:"+AllNoSend+" ("+LastErr+") OF:"+MustSend);
});
}
SetStatus("Must send="+MustSend);
ToResult("Must send="+MustSend);
}
function ToResult(Str)
{
$("result").value=Str;
}
//***********************************************
var idSendServer=undefined;
function StartSendServerPeriod(Period)
{
var Period=1000*ParseNum($("idPeriodRun").value);
if(idSendServer)
clearInterval(idSendServer);
idSendServer=0;
if(Period)
{
idSendServer=setInterval(function ()
{
var Value = $("idConsoleText").value;
SendServerCode(Value);
},Period);
return "Set period="+Period;
}
return "Clear";
}
//***********************************************
var idSendRandom=undefined;
function StartSendRandom(Period)
{
if(idSendRandom)
clearInterval(idSendRandom);
idSendRandom=0;
if(Period)
{
idSendRandom=setInterval(SendRandom,Period);
return "Set period="+Period;
}
return "Clear";
}
var glNumSend=0;
function SendRandom()
{
glNumSend++;
var Body=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
Body[6]=glNumSend&0xFF;
Body[7]=(glNumSend>>>8) & 0xFF;
Body[8]=(glNumSend>>>16) & 0xFF;
Body[9]=(glNumSend>>>24) & 0xFF;
var rnd=Math.floor(Math.random()*1000000000);
Body[10]=rnd&0xFF;
Body[11]=(rnd>>>8) & 0xFF;
Body[12]=(rnd>>>16) & 0xFF;
Body[13]=(rnd>>>24) & 0xFF;
SendHEXTransaction(GetHexFromArr(Body));
}
function CheckCtrlEnter(e,F)
{
SaveValues();
if(e.ctrlKey && e.keyCode===13)
{
SendToServer();
}
if(e.keyCode===27)
{
window.close();
}
//SetStatus("keyCode="+e.keyCode)
}
function CheckDevelop()
{
GetData("GetWalletInfo",{}, function (Data)
{
if(Data && Data.result)
{
if(!Data.IsDevelopAccount)
{
var Select = $("idConsoleSend");
for(var i=0;i<Select.options.length;i++)
{
var item=Select.options[i];
if(item.value==="ECode")
{
item.disabled=1;
Select.options[i] = null;
break;
}
}
}
}
});
}
window.onload=function()
{
setInterval(UpdateData,100);
setTimeout(CheckDevelop,500);
window.onkeydown = CheckCtrlEnter;
LoadValues();
SaveArrToSelect();
document.body.className="univers "+localStorage["idSelStyle"];
SetStatus("");
OnSelectTypeCode();
}
function LoadValues()
{
if(!localStorage["WasSaveConsole"])
return;
//$("idConsoleText").value=localStorage["idConsoleText"];
$("idConsoleSend").value=localStorage["idConsoleSend"];
$("idConsoleDeltaBlockNum").value=localStorage["idConsoleDeltaBlockNum"];
$("idNode").value=localStorage["idConsoleNode"];
if(localStorage["ConsoleCodeList2"])
CodeList=JSON.parse(localStorage["ConsoleCodeList2"]);
if(localStorage["idConsolePow"])
$("idPow").value=localStorage["idConsolePow"];
//$("idSendAll").checked=(localStorage["idConsoleSendAll"]==="true");
$("idProcessTX").checked=(localStorage["idConsoleProcessTX"]==="true");
if(localStorage["idConsolePeriodRun"])
$("idPeriodRun").value=localStorage["idConsolePeriodRun"];
}
function SaveValues()
{
localStorage["WasSaveConsole"]=1;
//localStorage["idConsoleText"]=$("idConsoleText").value;
localStorage["idConsoleSend"]=$("idConsoleSend").value;
localStorage["idConsoleDeltaBlockNum"]=$("idConsoleDeltaBlockNum").value;
localStorage["idConsoleNode"]=$("idNode").value;
localStorage["ConsoleCodeList2"]=JSON.stringify(CodeList);
localStorage["idConsolePow"]=$("idPow").value;
//localStorage["idConsoleSendAll"]=$("idSendAll").checked;
localStorage["idConsoleProcessTX"]=$("idProcessTX").checked;
localStorage["idConsolePeriodRun"]=$("idPeriodRun").value;
}
</script>
<style type="text/css">
</style>
<body>
<DIV align='center'>
<B>CONSOLE</B>
<DIV id="status2"></DIV><BR>
<DIV id="status"> ... </DIV><BR>
Mode:
<select size="1" id="idConsoleSend" onkeyup="OnSelectTypeCode();SaveValues()" onchange="OnSelectTypeCode();SaveValues()">
<option value="ServerCode">Server code</option>
<option value="ClientCode">Client code</option>
<option value="ECode" style="color:red;">Eval code !!</option>
<option value="HEX">HEX Transaction</option>
</select>
POW:<INPUT type="number" id="idPow" style="width: 50px;" onchange="SaveValues();" value="14"> Delta BlockNum:<INPUT type="number" id="idConsoleDeltaBlockNum" style="width: 50px;" value="10">
<BR>
<DIV align='left' style="border: 1px solid #39519b;width:1198px;height:800px;">
<DIV style="width: 200px;height:100%; float:left;">
<select size="45" id="idConsoleIndex" style="width:100%;height:100%;" onchange="SetConsoleText()" ondblclick="SetAndRun()">
</select>
</DIV>
<DIV style="width: 998px;height:100%; float: left;">
<DIV>
<DIV>
<INPUT type="button" onclick="NewRow()" class="bt" value="*New">
Name:<INPUT type="string" id="idName" style="width: 72%;" value="">
<INPUT type="button" onclick="SaveToList(1)" class="bt" value="Save">
</DIV>
<textarea id="idConsoleText" style="width: 99%;height: 95%;" rows="22" cols="98" autofocus>
</textarea>
</DIV>
<textarea rows="5" cols="98" name="result" id="idNode" style="width: 99%;">
</textarea>
<INPUT type="button" onclick="SendToServer()" class="bt btdoit" id="idBtRun" value="Send">
<!--All<input type="checkbox" id="idSendAll" onchange = "SaveValues()"/>-->
<INPUT type="button" onclick="StartSendServerPeriod()" class="bt btdoit" id="idBtRun2" value="Run every">
<INPUT type="number" id="idPeriodRun" style="width: 50px;" onchange="SaveValues();" value="1">sec
TX process:<INPUT type="checkbox" id="idProcessTX">
<BR>
<BR>
<textarea rows="18" cols="98" name="result" id="result" style="width: 99%;">
</textarea>
</DIV>
</DIV>
</DIV>
</body>
</html>

904
Source/HTML/dapp-edit.html Normal file
View File

@ -0,0 +1,904 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dapps IDE (simple)</title>
<link rel="shortcut icon" href="/HTML/PIC/smart.png" type="image/png">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/buttons.css">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/style.css">
</head>
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="../HTML/JS/client.js"></script>
<script type="text/javascript" src="../HTML/JS/sha3.js"></script>
<script type="text/javascript" src="../HTML/JS/crypto-client.js"></script>
<script type="text/javascript" src="/HTML/JS/terahashlib.js"></script>
<script>
var CONFIG_DATA={}; CONFIG_DATA.CONSTANTS={};
function SetStatus(Str)
{
var id = $("idStatus");
id.innerHTML=Str;
}
function SetError(Str,bNoSound)
{
SetStatus("<DIV align='left' style='color:red'><B>"+Str+"</B></DIV>");
}
var PrevServerStr;
function SetStatusFromServer(Str)
{
var id = document.getElementById("idServerLog");
if(PrevServerStr!==Str)
{
PrevServerStr=Str;
id.innerHTML=Str;
}
}
function UpdateData()
{
GetData("GetWalletInfo",{}, function (Data)
{
if(Data && Data.result)
{
CONFIG_DATA=Data;
SetBlockChainConstant(Data);
SetArrLog(Data.ArrLog);
}
});
}
///////////////////
function AddToPayList()
{
var Smart={};
SetDialogToSmart(Smart);
if(Smart.AccountLength<1)
Smart.AccountLength=1;
if(Smart.AccountLength>50)
Smart.AccountLength=50;
var Body=[];
WriteByte(Body,130)
WriteByte(Body,Smart.TokenGenerate);
WriteUint(Body,Smart.StartValue);
WriteByte(Body,Smart.OwnerPubKey);
WriteStr(Body,Smart.ISIN);
WriteByte(Body,0);//Zip
WriteByte(Body,Smart.AccountLength);
WriteStr(Body,Smart.StateFormat);
WriteByte(Body,Smart.Category1);
WriteByte(Body,Smart.Category2);
WriteByte(Body,Smart.Category3);
for(var i=0;i<20;i++)Body[Body.length]=0;//Reserve
var IconParam=ParseFileName($("idIcon").value);
WriteUint(Body,Smart.IconBlockNum);
WriteUint16(Body,Smart.IconTrNum);
WriteStr(Body,Smart.ShortName,5);
WriteStr(Body,Smart.Name);
WriteStr(Body,Smart.Description);
WriteStr(Body,Smart.Code);
WriteStr(Body,Smart.HTML);
var Price;
if(Smart.TokenGenerate)
Price=CONFIG_DATA.PRICE_DAO.NewTokenSmart;
else
Price=CONFIG_DATA.PRICE_DAO.NewSmart;
Price+=(Smart.AccountLength-1)*CONFIG_DATA.PRICE_DAO.NewAccount;
var Item=
{
name:Smart.Name,
To:0,
Amount:Price,
Description:"Create smart: "+Smart.Name,
Body:Body,
};
AddToInvoiceList(Item);
if(localStorage["InvoiceList"])
SetStatus("OK Sent to wallet: "+name);
}
function CheckCtrlEnter(e,F)
{
if(e.ctrlKey && e.keyCode===13)
{
//SendToServer();
}
if(e.keyCode===27)
{
//window.close();
}
}
window.onload=function()
{
setInterval(UpdateData,500);
FillCategory("idCategory1");
FillCategory("idCategory2");
FillCategory("idCategory3");
window.onkeydown = CheckCtrlEnter;
LoadValues();
FillSmart();
document.body.className="univers "+localStorage["idSelStyle"];
SetStatus("");
SetVisibleTab();
SetSampleByName();
SetDialogEnabled();
}
var SaveIdArr=["idSmartStart","idText","idType"];
function LoadValues()
{
LoadValuesByArr(SaveIdArr,"SMART");
var List=localStorage["SMART-SendFileList"];
if(List)
{
SendFileMap=JSON.parse(List);
FillMapByName();
FillSelect("idSendFileList",SendFileMap);
}
var ArrStr=localStorage["SMART-ProjectArray"];
if(ArrStr)
{
ProjectArray=JSON.parse(ArrStr);
}
FillProject();
}
function SaveValues(All)
{
var bDisabled=(CurProjectValue!=$("idProjectList").value);
if(!bDisabled && CurProjectValue)
{
var Smart=ProjectArray[parseInt(CurProjectValue)];
SetDialogToSmart(Smart);
FillProject();
}
if(All)
{
SaveValuesByArr(SaveIdArr,"SMART");
localStorage["SMART-ProjectArray"]=JSON.stringify(ProjectArray);
}
}
setInterval(function ()
{
SaveValues(1);
},60*1000);
setInterval(function ()
{
SaveValues();
},500);
window.onbeforeunload=function (e)
{
SaveValues(1);
}
</script>
<script>
var CurTabName;
var TabArr=[{name:"TabDApp"},{name:"TabFile"},{name:"TabText"}];
function SelectTab(name)
{
CurTabName=name;
//OnSelectTab(name);
SetVisibleTab();
SaveValues();
}
function SetVisibleTab()
{
if(!CurTabName)
CurTabName=TabArr[0].name;
if(CurTabName==="TabDApp")
SetVisibleBlock("idServerBlock",0);
else
SetVisibleBlock("idServerBlock",1);
var str;
for (var i=0;i<TabArr.length;i++)
{
var name=TabArr[i].name;
var Item=document.getElementById(name);
if(!Item)
continue;
if(CurTabName===name)
{
Item.style.display = 'block';
str="current bt bttab"
}
else
{
Item.style.display = 'none';
str="bttab bt"
}
var ItemM=document.getElementById("M"+name);
if(ItemM)
ItemM.className=str;
}
}
</script>
<script>
//FILES
var SendFileMap={};
var FileMapByName={};
function FillMapByName()
{
FileMapByName={};
for(var key in SendFileMap)
{
var item=SendFileMap[key];
FileMapByName[item.Name]=item;
}
}
function SendFile(TR)
{
var file = $("idFile").files[0];
var reader = new FileReader();
reader.onload = function()
{
if(reader.result.byteLength>16384)
SetError("File very long");
else
{
var view = new Uint8Array(reader.result);
var Body=[5];
var file = $("idFile").files[0];
WriteStr(Body,file.name);
WriteStr(Body,file.type);
for(var i=0;i<10;i++)Body[Body.length]=0;//Reserve
WriteTr(Body,view);
Body.length+=12;
if(!TR)
TR={};
TR.Name=file.name;
TR.Type=file.type;
SendTransaction(Body,TR);
//document.getElementById('out').innerHTML = view;
//Body=Body;
}
}
reader.readAsArrayBuffer(file)
}
function CalclTextLength()
{
var Str=$("idText").value;
var view=GetArrFromStr(Str);
SetStatus("Length:"+view.length);
}
function SendText(TR)
{
var type=$("idType").value;
var Str=$("idText").value;
if(Str.length===0)
return;
var view=GetArrFromStr(Str);
//var view = Uint8Array.from(Str);
if(view.length>16000)
{
SetStatus("Error length file = "+view.length+" (max size=16000)");
return;
}
var Body=[5];
var name="text";
WriteStr(Body,name);
WriteStr(Body,type);
for(var i=0;i<10;i++)Body[Body.length]=0;//Reserve
WriteTr(Body,view);
Body.length+=12;
if(!TR)
TR={};
TR.Name=name;
TR.Type=type;
SendTransaction(Body,TR);
}
function SetArrLog(arr)
{
var Str="";
for(var i=0;i<arr.length;i++)
{
var Item=arr[i];
var info=Item.text;
var index=info.indexOf("Add to blockchain: file");
if(index>=0)
{
var StrRef0=info.substr(index+19);
var StrRef="/"+StrRef0;
Str=Str+info.substr(0,index+19)+"<A target='_blank' href='"+StrRef+"'>"+StrRef+"</A><BR>\n";
var TR=MapSendTransaction[Item.key];
if(TR)
if(TR && !SendFileMap[StrRef])
{
SendFileMap[StrRef]={text:TR.Name+" ("+StrRef0+")",value:StrRef,Name:TR.Name,Type:TR.Type};
FillMapByName();
if(TR.idName)
{
$(TR.idName).value=StrRef;
$(TR.idNameSrc).src=StrRef;
SaveValues();
}
localStorage["SMART-SendFileList"]=JSON.stringify(SendFileMap);
FillSelect("idSendFileList",SendFileMap);
}
}
else
{
Str=Str+info+"<BR>\n";
}
}
SetStatusFromServer(Str);
}
//GIU blockchain files
function ViewBlockchainFile()
{
var item=SendFileMap[$("idSendFileList").value];
if(!item)
{
$("idImgInfo").innerText="Error";
}
else
{
$("idImgInfo").innerText=item.value+" "+item.Type;
$("idImg").src=item.value;
}
}
function SelectBlockchainFile(idName,idNameSrc)
{
$("idFile").value="";
$('idFile').onchange=function ()
{
$('idFile').onchange=undefined;
var file = $("idFile").files[0];
if(!file)
return;
var item=FileMapByName[file.name];
if(item)
{
$(idName).value=item.value;
$(idNameSrc).src=item.value;
SaveValues();
}
else
{
$(idName).value="=wait=";
$(idNameSrc).src="";
SendFile({idName:idName,idNameSrc:idNameSrc});
}
}
$('idFile').click();
}
function SetSampleByName()
{
$("idIconSample").src=$("idIcon").value;
if(!$("idIcon").value.trim())
$("idIconSample").src="/viewer.png"
SaveValues();
}
function ClearListFile()
{
var result = confirm("Are you sure?");
if(!result)
return;
SendFileMap={};
FileMapByName={};
localStorage["SMART-SendFileList"]=JSON.stringify(SendFileMap);
FillSelect("idSendFileList",SendFileMap);
}
</script>
<script>
//Projects
//Projects
//Projects
function SetDialogToSmart(Smart)
{
Smart.ShortName=$("idShortName").value;
Smart.ISIN=$("idISIN").value;
Smart.Name=$("idName").value;
Smart.Description=$("idDescription").value;
Smart.TokenGenerate=$("idTokenGenerate").checked;
Smart.AccountLength=$("idAccountLength").value;
Smart.StateFormat=$("idStateFormat").value;
Smart.Category1=$("idCategory1").value;
Smart.Category2=$("idCategory2").value;
Smart.Category3=$("idCategory3").value;
var IconParam=ParseFileName($("idIcon").value);
Smart.IconBlockNum=IconParam.BlockNum;
Smart.IconTrNum=IconParam.TrNum;
Smart.Code=$("idCode").value;
Smart.HTML=$("idHTML").value;
Smart.StartValue=$("idStartValue").value;
Smart.OwnerPubKey=$("idOwnerPubKey").checked;
}
function SetSmartToDialog(Smart,bSaveToArr)
{
$("idName").value=Smart.Name;
$("idShortName").value=Smart.ShortName;
$("idISIN").value=Smart.ISIN;
$("idDescription").value=Smart.Description;
$("idTokenGenerate").checked=Smart.TokenGenerate;
$("idAccountLength").value=Smart.AccountLength;
$("idStateFormat").value=Smart.StateFormat;
$("idCategory1").value=Smart.Category1;
$("idCategory2").value=Smart.Category2;
$("idCategory3").value=Smart.Category3;
if(Smart.IconBlockNum)
$("idIcon").value="/file/"+Smart.IconBlockNum+"/"+Smart.IconTrNum;
else
$("idIcon").value="";
$("idCode").value=Smart.Code;
$("idHTML").value=Smart.HTML;
$("idStartValue").value=Smart.StartValue;
$("idOwnerPubKey").checked=Smart.OwnerPubKey;
SetSampleByName();
var bEnable=SetDialogEnabled();
if(bSaveToArr && bEnable)
{
ProjectArray[parseInt(CurProjectValue)]=Smart;
FillProject();
}
}
function SetDialogEnabled()
{
var bDisabled=(CurProjectValue!=$("idProjectList").value);
var Arr=["idName","idShortName","idISIN","idCode","idHTML","idDescription","idTokenGenerate","idStartValue","idOwnerPubKey","idAccountLength","idStateFormat","idCategory1","idCategory2","idCategory3","idIcon","idBtIcon","idBtSendSmart"];
for(var i=0;i<Arr.length;i++)
{
var item=$(Arr[i]);
item.disabled=bDisabled;
if(bDisabled)
item.classList.add("Disabled");
else
item.classList.remove("Disabled");
}
return !bDisabled;
}
var StrSmartPath="";
function LoadSmart(Path)
{
SetStatus("");
if(!Path)
Path=prompt("Enter smart number or string of blockchain file path (example: /file/12345/10)", StrSmartPath);
if(Path!==null)
{
if(Path==""+parseInt(Path))
{
StrSmartPath=Path;
GetData("DappSmartList",{StartNum:parseInt(Path),CountNum:1,GetAllData:1}, function (SetData)
{
if(SetData && SetData.result && SetData.arr.length===1)
{
var Smart=SetData.arr[0];
LoadSmart("/file/"+Smart.BlockNum+"/"+Smart.TrNum);
//SetSmartToDialog(Smart,1);
}
else
{
SetError("Error smart number: "+Path);
}
});
}
else
{
var Param=ParseFileName(Path);
if(!Param.BlockNum)
{
SetError("Error file path: "+Path);
return;
}
StrSmartPath=Path;
GetData("DappBlockFile",Param, function (SetData)
{
if(SetData && SetData.result)
{
if(SetData.Type===111 && SetData.Body.Body.Type===130)
{
var Smart=SetData.Body.Body;
SetSmartToDialog(Smart,1);
}
else
{
SetError("Error type ("+SetData.Type+") transaction in path: "+Path);
}
}
else
{
SetError("Error data in path: "+Path);
}
});
}
}
}
function SetCurrentSmart()
{
CurProjectValue=undefined;
SetDialogEnabled();
var SmartValue=$("idSmartList").value;
if(SmartValue)
LoadSmart(SmartValue);
}
function FillSmart()
{
var StartNum=$("idSmartStart").value;
if(!StartNum)
StartNum=8;
GetData("DappSmartList",{StartNum:StartNum,CountNum:50}, function (SetData)
{
if(SetData && SetData.result)
{
var Arr=[];
for(var i=0;i<SetData.arr.length;i++)
{
var Smart=SetData.arr[i];
var img="";
if(Smart.IconBlockNum)
img="/file/"+Smart.IconBlockNum+"/"+Smart.IconTrNum;
Arr.push({text:""+Smart.Num+". "+Smart.Name,value:Smart.Num,img:img});
}
FillSelect("idSmartList",Arr);
}
});
}
var ProjectArray=[];
var CurProjectValue=undefined;
function FillProject()
{
var Arr=[];
for(var i=0;i<ProjectArray.length;i++)
{
var Smart=ProjectArray[i];
var img="";
if(Smart.IconBlockNum)
img="/file/"+Smart.IconBlockNum+"/"+Smart.IconTrNum;
Arr.push({text:""+Smart.Name,value:i,img:img});
}
FillSelect("idProjectList",Arr);
$("idProjectList").value=CurProjectValue;
}
function SetCurrentProject()
{
var SmartValue=$("idProjectList").value;
if(SmartValue)
{
CurProjectValue=SmartValue;
var Smart=ProjectArray[parseInt(SmartValue)];
SetSmartToDialog(Smart);
}
}
function DelProject()
{
var result = confirm("Are you sure?");
if(!result)
return;
var SmartValue=$("idProjectList").value;
if(SmartValue)
{
var Index=parseInt(SmartValue);
ProjectArray.splice(Index,1);
FillProject();
if(Index>=ProjectArray.length)
Index=ProjectArray.length-1;
var Smart;
if(Index>=0)
{
Smart=ProjectArray[Index];
CurProjectValue=""+Index;
}
else
{
Smart=GetBlankSmart();
CurProjectValue=undefined;
}
SetSmartToDialog(Smart);
$("idProjectList").value=Index;
}
}
var glNewSmart=0;
function GetBlankSmart()
{
var Smart={};
Smart.Name="";
Smart.ShortName="";
Smart.ISIN="";
Smart.Description="";
Smart.TokenGenerate=0;
Smart.AccountLength=1;
Smart.StateFormat="";
Smart.Category1=0;
Smart.Category2=0;
Smart.Category3=0;
Smart.IconBlockNum=0;
Smart.IconTrNum=0;
Smart.Code="";
Smart.HTML="";
return Smart;
}
function NewProject()
{
glNewSmart++;
var Smart=GetBlankSmart();
Smart.Name="New "+glNewSmart;
ProjectArray.push(Smart);
FillProject();
$("idProjectList").value=ProjectArray.length-1;
CurProjectValue=$("idProjectList").value;
SetSmartToDialog(Smart);
$("idName").focus();
}
</script>
<style type="text/css">
#idCode
{
color: #0d341a;
font-weight: 500;
}
#idHTML
{
color: #3b1c0e;
font-weight: 500;
}
.Disabled
{
background-color: #e6eefe;
}
</style>
<body>
<DIV align='center'>
<table id="TabHeader">
<tr>
<th><INPUT id="MTabDApp" type="button" onclick="SelectTab('TabDApp')" class="bttab" value="Smart & HTML"></th>
<th><INPUT id="MTabFile" type="button" onclick="SelectTab('TabFile')" class="bttab" value="Files"></th>
<th><INPUT id="MTabText" type="button" onclick="SelectTab('TabText')" class="bttab" value="Text"></th>
</tr>
</table>
<BR>
<!--<DIV align='left' style="border: 1px solid #39519b;width:998px;height:800px;">-->
<DIV align='left' style="border: 1px solid #39519b;width:1198px;height:800px;">
<DIV id="TabDApp" style="display: none">
<DIV style="width: 200px;height:100%; float:left;">
Projects:
<INPUT type="button" onclick="NewProject()" class="bt" value="New">
<INPUT type="button" onclick="DelProject()" class="bt" value="Del">
<INPUT type="button" onclick="LoadSmart()" class="bt" value="Load">
<select size="45" id="idProjectList" style="width:100%;height:375px;" onchange="SetCurrentProject()" onclick="SetCurrentProject()">
</select>
Smarts, start:<INPUT type="number" id="idSmartStart" style="width: 111px;" onchange="FillSmart()" value="8">
<select size="45" id="idSmartList" style="width:100%;height:380px;" onchange="SetCurrentSmart()" onclick="SetCurrentSmart()">
</select>
</DIV>
<DIV style="width: 998px;height:100%; float: left;">
<DIV>
<DIV>
Name:<INPUT type="string" id="idName" style="width: 20%;" value="">
Accounts:<INPUT type="number" id="idAccountLength" style="width: 5%;" value="1">
<INPUT type="button" onclick="AddToPayList()" class="bt btdoit" style="width: 130px; " id="idBtSendSmart" value="Add to Pay list">
<input type="checkbox" class="" id="idTokenGenerate" onchange = ""/>Token generate:
<BR>
Short name:<INPUT type="string" id="idShortName" style="width: 6%;" value="">
ISIN:<INPUT type="string" id="idISIN" style="width:10%;" value="">
Amount:<INPUT type="number" id="idStartValue" style="width: 15%;" value="">
<input type="checkbox" class="" id="idOwnerPubKey" onchange = ""/> Owner PubKey
</DIV>
Description:
<textarea id="idDescription" style="width: 99%;height: 95%;" rows="2" cols="98">
</textarea>
<DIV style="text-align: center; margin-top: 0px">
<DIV style="border: 1px solid black;width: 32px;height: 32px;float: left">
<img src="/" id="idIconSample" style="max-width: 32px;">
</DIV>
Icon:
<INPUT type="string" id="idIcon" style="width: 10%;" onchange="SetSampleByName()" value=""><button id="idBtIcon" onclick="SelectBlockchainFile('idIcon','idIconSample')">...</button>
Category1:
<select size="1" id="idCategory1">
</select>
Category2:
<select size="1" id="idCategory2">
</select>
Category3:
<select size="1" id="idCategory3">
</select>
</DIV>
Smart (JS):
<textarea id="idCode" style="width: 99%;height: 95%;" rows="19" cols="98" autofocus>
</textarea>
State format:
<textarea id="idStateFormat" style="width: 99%;height: 95%;" rows="2" cols="98" autofocus>
</textarea>
</DIV>
UI (HTML):
<textarea rows="15" cols="98" id="idHTML" style="width: 99%;">
</textarea>
</DIV>
</DIV>
<DIV id="TabFile" style="display: none">
<H2 align="center">Upload file to blockchain</H2>
<BR>
<input type="file" id="idFile" style="width: 50%;">
<INPUT type="button" onclick="SendFile()" class="bt btdoit" style="width: 130px;" id="idBtSendFile" value="Send file">
<BR>
<table>
<tr>
<td style="width: 50px">
<select size="10" id="idSendFileList" onclick="ViewBlockchainFile()" onkeyup="ViewBlockchainFile()">
</select>
</td>
<td style="width: 50px;vertical-align: top;text-align: center;align-content: center">
<DIV id="idImgInfo"></DIV>
<img src="" id="idImg" style="max-width: 200px">
</td>
</tr>
</table>
<button onclick="ClearListFile()">Clear list file</button>
<BR>
</DIV>
<DIV id="TabText" style="display: none">
<H2 align="center">Upload text to blockchain</H2>
Send as type:
<select size="1" id="idType" style="width:100px;">
<option value="text/html">html</option>
<option value="application/javascript">javascript</option>
<option value="text/css">css</option>
<option value="text/plain">text</option>
</select>
<INPUT type="button" onclick="SendText()" class="bt btdoit" style="width: 130px;" id="idBtSendText" value="Send">
<textarea id="idText" style="width: 99%;height: 95%;" rows="26" cols="98" onkeyup="CalclTextLength()" onchange="CalclTextLength()">
</textarea>
</DIV>
<DIV id="idServerBlock" style="width: 99.5%;">
<HR>
Log from node:
<DIV id="idServerLog"></DIV><BR>
</DIV>
<DIV id="idStatus"></DIV>
</DIV>
</DIV>
</body>
</html>

510
Source/HTML/dapp-frame.html Normal file
View File

@ -0,0 +1,510 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-Frame-Options" value="sameorigin">
<title>DAPP Loading...</title>
<link rel="shortcut icon" href="./tera.ico" type="image/vnd.microsoft.icon">
<script type="text/javascript" src="./JS/crypto-client.js"></script>
<script type="text/javascript" src="./JS/coinlib.js"></script>
<script type="text/javascript" src="./JS/client.js"></script>
<script type="text/javascript" src="./JS/terahashlib.js"></script>
<script>
var DapNumber="#template-number#";
var glSmart=parseInt(DapNumber);
var CONFIG_DATA={};
var NumDappGet=0;
var NumDappInfo=0;
var arr = new Uint8Array(6);
window.crypto.getRandomValues(arr);
var glSession=GetHexFromArr(arr);
//DAPP TRANSFER
function SendMessage(Data)
{
var win = window.frames.dapp;
if(!win)
{
console.log("Error window.frames.dapp");
//try latter
setTimeout(function ()
{
win.postMessage(Data, "*");
},200);
return;
}
//console.log("To dapp: "+JSON.stringify(Data))
win.postMessage(Data, "*");
}
var glProgramSetHash;
function listener(event)
{
var Data=event.data;
if(!Data || typeof Data!=="object")
return;
switch (Data.cmd)
{
case "pay":
{
AddToInvoiceList(Data);
break;
}
case "setstorage":
{
localStorage.setItem("DAPP-"+DapNumber+"-"+Data.Key,JSON.stringify(Data.Value));
break;
}
case "getstorage":
{
Data.Value=localStorage.getItem("DAPP-"+DapNumber+"-"+Data.Key);
if(Data.Value)
Data.Value=JSON.parse(Data.Value);
SendMessage(Data);
break;
}
case "setcommon":
{
localStorage.setItem("DAPP-"+Data.Key,JSON.stringify(Data.Value));
break;
}
case "getcommon":
{
Data.Value=localStorage.getItem("DAPP-"+Data.Key);
if(Data.Value)
Data.Value=JSON.parse(Data.Value);
SendMessage(Data);
break;
}
case "DappCall":
{
if(!Data.Account)
Data.Account=BASE_ACCOUNT.Num;
GetData("DappStaticCall",{Account:Data.Account,MethodName:Data.MethodName,Params:Data.Params}, function (SetData)
{
if(SetData)
{
Data.Err=!SetData.result;
Data.RetValue=SetData.RetValue;
}
else
{
Data.Err=1;
}
SendMessage(Data);
});
break;
}
case "DappSendCall":
{
if(!Data.Account)
Data.Account=BASE_ACCOUNT.Num;
if(!Data.FromNum)
Data.FromNum=0;
SendCallMethod(Data.Account,Data.MethodName,Data.Params,Data.FromNum,glSmart);
break;
}
case "DappInfo":
{
//called every 1 sec from dapp-inner.js
var AllData=0;
if(!NumDappGet || NumDappGet%60===0)
AllData=1;
NumDappGet++;
var Key=localStorage["idPubKey"];
GetData("DappInfo",{Smart:glSmart,Key:Key,Session:glSession,NumDappInfo:NumDappInfo,AllData:AllData,AllAccounts:Data.AllAccounts}, function (SetData)
{
if(SetData)
{
Data.Err=!SetData.result;
Data.cache=SetData.cache;
if(SetData.result)
{
CONFIG_DATA=SetData;
SMART=SetData.Smart;
BASE_ACCOUNT=SetData.Account;
SetBlockChainConstant(SetData);
NumDappInfo=SetData.NumDappInfo;
SetArrLog(SetData.ArrLog);
for(var key in SetData)
Data[key]=SetData[key];
Data.OPEN_PATH=OPEN_PATH;
if(!Data.PubKey)
{
//support web/light wallet mode:
Data.PubKey=localStorage["idPubKey"];
Data.WalletIsOpen=IsPrivateMode(localStorage["idPrivKey"]);
Data.WalletCanSign=Data.WalletIsOpen;
}
}
SendMessage(Data);
}
});
break;
}
case "DappWalletList":
var Key=localStorage["idPubKey"];
Data.Params={Smart:glSmart,Key:Key};
case "DappSmartHTMLFile":
case "DappBlockFile":
case "DappAccountList":
case "DappSmartList":
case "DappBlockList":
case "DappTransactionList":
{
if(Data.cmd==="DappBlockFile")
{
//check storage
var StrKeyStorage=Data.Params.BlockNum+"-"+Data.Params.TrNum;
var Storage=sessionStorage;
var SavedTextData=Storage[StrKeyStorage];
if(SavedTextData)
{
var SetData=JSON.parse(SavedTextData);
Data.Err=!SetData.result;
Data.arr=SetData.arr;
Data.Body=SetData.Body;
SendMessage(Data);
return;
}
}
Data.Params.Session=glSession;
GetData(Data.cmd,Data.Params, function (SetData,responseText)
{
if(SetData)
{
Data.Err=!SetData.result;
Data.arr=SetData.arr;
Data.Body=SetData.Body;
SendMessage(Data);
if(StrKeyStorage && SetData.result)
{
Storage[StrKeyStorage]=responseText;
}
}
});
break;
}
case "SetStatus":
{
SetStatus(escapeHtml(Data.Message));
break;
}
case "SetError":
{
SetError(escapeHtml(Data.Message));
break;
}
case "CheckInstall":
{
CheckInstall();
break;
}
case "SetLocationHash":
{
glProgramSetHash=1;
window.location.hash="#"+Data.Message;
glProgramSetHash=0;
break;
}
case "OpenLink":
{
window.open(Data.Message);
break;
}
case "ComputeSecret":
{
ComputeSecret(Data.PubKey,function (Result)
{
Data.Result=Result;
SendMessage(Data);
});
break;
}
// case "GetLink":
// {
// GetData(Data.url,Data.Params, function (SetData)
// {
// if(SetData)
// {
// SendMessage({cmd:"GetLink",Result:SendData});
// }
// });
// break;
// }
}
}
if (window.addEventListener)
{
window.addEventListener("message", listener);
} else
{
// IE8
window.attachEvent("onmessage", listener);
}
var SMART={},BASE_ACCOUNT={},OPEN_PATH="";
window.onload=function()
{
if(window.location.hash)
OPEN_PATH=window.location.hash.substr(1);
if(window.location.protocol==="file:")
{
DapNumber=window.location.search.substr(6);
if(localStorage["MainServer"])
{
MainServer=JSON.parse(localStorage["MainServer"]);
}
}
glSmart=parseInt(DapNumber);
var Key=localStorage["idPubKey"];
GetData("DappInfo",{Smart:glSmart, Key:Key, Session:glSession, AllData:1}, function (SetData)
{
if(!SetData || !SetData.result)
return;
CONFIG_DATA=SetData;
SMART=SetData.Smart;
BASE_ACCOUNT=SetData.Account;
SetBlockChainConstant(SetData);
document.title=SMART.Name;
if(!glDebugPath && BASE_ACCOUNT.SmartState.HTMLBlock)
{
GetData("DappBlockFile",{BlockNum:BASE_ACCOUNT.SmartState.HTMLBlock,TrNum:BASE_ACCOUNT.SmartState.HTMLTr}, function (SetData)
{
if(SetData && SetData.result)
{
CreateFrame(SetData);
}
});
}
else
{
GetData("DappSmartHTMLFile",{Smart:glSmart,DebugPath:glDebugPath}, function (SetData)
{
if(SetData && SetData.result)
{
CreateFrame(SetData);
}
});
}
});
if(!window.sha3)
LoadLib("./JS/sha3.js");
LoadSignLib();
window.addEventListener("popstate", function(event)
{
OPEN_PATH=window.location.hash.substr(1);
if(!glProgramSetHash)
SendMessage({cmd:"History",OPEN_PATH:OPEN_PATH});
}, false);
}
function CreateFrame(SetData)
{
var SriptLW="";
if(MainServer)
{
var StrPath=GetProtocolServerPath(MainServer);
//console.log("StrPath:"+StrPath);
//console.log("WAS:\n"+SetData.Body);
//поддрежка старого кода dapp (после обновления dapp этот код возможно будет удален)
SetData.Body=SetData.Body.replace(/\/[0-9a-z_-]+.css\">/g,StrPath+"/CSS$&");
SetData.Body=SetData.Body.replace(/\/[0-9a-z_-]+.js\">/g,StrPath+"/JS$&");
//TODO: переделать на нормальный парсинг без регулярки
//поддержка перенаправления в блокчейн
SetData.Body=SetData.Body.replace(/\/file\/[0-9]+\/[0-9]+\"/g,StrPath+"$&");
SriptLW="<script>window.PROTOCOL_SERVER_PATH='"+StrPath+"';<\/script>";
//console.log("NEW:\n"+SetData.Body);
}
var iframe = document.createElement('iframe');
iframe.name = 'dapp';
iframe.sandbox="allow-scripts";
SetData.Body='\
<meta charset="UTF-8">\
<meta http-equiv="X-Frame-Options" value="sameorigin">\
<script type="text/javascript" src="./JS/crypto-client.js"><\/script>\
<script type="text/javascript" src="./JS/coinlib.js"><\/script>\
<script type="text/javascript" src="./JS/client.js"><\/script>\
<script type="text/javascript" src="./JS/dapp-inner.js"><\/script>\
<script type="text/javascript" src="./JS/terahashlib.js"><\/script>\
'+SriptLW+SetData.Body;
iframe.srcdoc=SetData.Body;
document.getElementsByTagName('body')[0].appendChild(iframe);
}
var WasCheckInstall=0;
function CheckInstall()
{
if(WasCheckInstall)
return;
setInterval(function ()
{
if(CONFIG_DATA && CONFIG_DATA.ArrWallet && CONFIG_DATA.ArrWallet.length===0)
{
WasCheckInstall=1;
var StrRef;
if(MainServer)
StrRef='<A href="./web-wallet.html#TabAccounts">ACCOUNTS</A>';
else
{
if(localStorage["BIGWALLET"])
StrRef='<A href="/wallet.html#TabAccounts">CONFIG</A>'
else
StrRef='<A href="/web-wallet.html#TabAccounts">ACCOUNTS</A>';
}
SetStatus('<DIV style="background-color: peachpuff;">For install this application goto '+StrRef+' tab, select your account, press "Set" and enter smart number: <B>'+SMART.Num+'</B><DIV>');
}
},2000);
}
//LIB
function SetArrLog(arr)
{
var Str="";
if(arr)
for(var i=0;i<arr.length;i++)
{
var Item=arr[i];
if(!Item.final)
continue;
if(Item.text.indexOf("Add to blockchain")>=0)
continue;
var TR=MapSendTransaction[Item.key];
if(TR && !TR.WasSend && Item.final)
{
var Data={};
Data.cmd="OnEvent";
Data.Description="Error: "+Item.text;
Data.Error=1;
//console.log(JSON.stringify(Item));
SendMessage(Data);
TR.WasSend=1;
}
}
}
function IsPrivateMode(PrivKeyStr)
{
if(PrivKeyStr && PrivKeyStr.length===64)
return 1;
else
return 0;
}
function SetStatus(Str)
{
var id = $("idStatus");
id.innerHTML=Str;
console.log(id.innerText);
}
function SetError(Str,bNoSound)
{
SetStatus("<DIV style='color:red'><B>"+Str+"</B></DIV>");
}
function InstallApp()
{
}
</script>
<style>
iframe
{
position2:fixed;
left:0;
top: 20px;
width: 100%;
height: 97vh;
border: 0;
}
#idStatus
{
text-align: center;
position:fixed;
top: 0;
left: 0;
width: 100%;
height:20px;
padding: 0;
margin: 0;
background-color:white;
}
</style>
</head>
<body>
<DIV id="idStatus"></DIV>
</body>
</html>
<script>
var glDebugPath="";
// glDebugPath="./dapp-smart/forum.html";
//glDebugPath="./dapp-smart/DEX.html";
//glDebugPath="./dapp-smart/test-load.html";
// glDebugPath="./dapp-smart/gambling-1.html";
// glDebugPath="./dapp-smart/BTC-coin.html";
// glDebugPath="./dapp-smart/freeze.html";
// glDebugPath="./dapp-smart/promise.html";
//glDebugPath="./dapp-smart/OnlineStore.html";
//glDebugPath="./dapp-smart/Clicker.html";
//{"HTMLBlock":3492141,"HTMLTr":0}
</script>

832
Source/HTML/monitor.html Normal file
View File

@ -0,0 +1,832 @@
<!doctype html>
<html>
<head>
<title>Monitor</title>
<meta charset='utf-8' />
<link rel="shortcut icon" href="/HTML/PIC/monitor.png" type="image/png">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/style.css">
</head>
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="../HTML/JS/client.js"></script>
<script type="text/javascript" src="../HTML/JS/diagram.js"></script>
<script>
var bPause;
var sessionid;
var StatMode;
function SetNewSession(cursessionid)
{
sessionid=cursessionid;
}
//DIALOG
//DIALOG
//DIALOG
function SetPause(SetMode)
{
if(SetMode===undefined)
{
bPause=!bPause;
}
else
{
bPause=SetMode;
}
var item = document.getElementById("idRun");
if(bPause)
item.value="Continue view";
else
item.value="Pause view";
}
function SetStatMode()
{
if(!StatMode)
StatMode=0;
StatMode=(StatMode+1)%2;
GetData("SetStatMode",StatMode,function (Data)
{
});
}
function ClearStat()
{
GetData("ClearStat",{},function (Data)
{
});
}
function SetStatInfo(Data)
{
var item = document.getElementById("idStatInfo");
var button = document.getElementById("idStatButton");
StatMode=Data.STAT_MODE;
if(StatMode)
{
item.innerText=" =Stat ON=";
button.value="Stop stat"
}
else
{
item.innerText=" =Stat OFF=";
button.value="Start stat"
}
}
//CHARTS
//CHARTS
//CHARTS
var DiagramArr=[];
var DiagramArrR=
[
{isLine:true,text:"SYSTEM"},
{name:"TIME_IDLE",text:"HEALTH TIME, %",value:0,red:"#24aa47"},
{name:"MAX:CPU_SYS_MODE",text:"CPU USER SYS, мс",value:0,red:"#06A"},
{name:"MAX:CPU",text:"CPU ALL WORK, ms",value:0,red:"#06A"},
// {name:"MAX:CPU_USER_MODE",text:"USER MODE, мс",value:0,red:"#06A"},
// {name:"MAX:CPU_IDLE_MODE",text:"USER IDLE, мс",value:0,red:"#0A6"},
{name:"MAX:MEMORY_USAGE",text:"Mem usage, Mbyte",value:300},
{name:"MAX:MEMORY_FREE",text:"Mem free, Mbyte",value:0,red:"#a1c3b9"},
//{name:"MAX:POWER-HASH**",text:"Hash Rate, Mh/s",value:0,red:"#95d6b9"},
{name:"HASHRATE",text:"Hash Rate, Mh/s",value:0,red:"#95d6b9"},
{name:"MAX:POWER",text:"MAX:POWER",value:0,red:"#95d6b9"},
{name:"POWER_MY_WIN",text:"POWER MY WIN",value:0,red:"#088a4a"},
{name:"POWER_BLOCKCHAIN",text:"POWER Blockchain",value:0,red:"#2b6311"},
{isLine:true,text:"NETWORK"},
{name:"GETDATA(KB)",text:"Packets receive, Kbyte",value:0,red:"#3b8a7f"},
{name:"SENDDATA(KB)",text:"Packets send, Kbyte",value:0,red:"#2b1e8a"},
{name:"WRITECHAIN_TO_DB_COUNT",text:"Loaded blocks, count",value:0},
{name:"MAX:TRANSACTION_COUNT",text:"Count transactions in block",value:0,red:"#2d628a"},
{isLine:true,text:"HEALTH"},
{name:"ERRORS",text:"ERRORS",value:0,red:"#A00"},
{name:"MAX:LOADEDCHAINLIST",text:"Loaded chains, count",value:0,red:"#95d6b9"},
{isLine:true,text:"NODES"},
{name:"MAX:BUSY_LEVEL",text:"BUSY_LEVEL",value:0,red:"#ff353b"},
{name:"STOP_METHOD",text:"STOP_METHOD",value:0,red:"#8a3d74"},
{name:"AddToBan",text:"AddToBan",value:0,red:"#8a3d74"},
{name:"TRANSFER_TIME_OUT",text:"TRANSFER TIME OUT, count",value:0,red:"#ff353b"},
{name:"NETCONFIGURATION",text:"NETCONFIGURATION",value:0,red:"#8a5663"},
{name:"MAX:ALL_NODES",text:"All nodes count",value:0,red:"#83a3d6"},
{name:"MAX:CONNECTED_NODES",text:"Connected nodes count",value:0,red:"#516e80"},
{name:"MAX:HASH_OK",text:"Block chain Hash = OK",value:0,red:"#2b6311"},
{name:"MAX:HOT_NODES",text:"TRANSFER nodes, count",value:0,red:"#063c8a"},
{name:"MAX:MEDIAN_GLOB_TIME",text:"MEDIAN_GLOB_TIME",value:0,red:"#5e729b",zero:100},
{name:"MAX:DISP_MEDIAN_GLOB_TIME",text:"DISP_MEDIAN_GLOB_TIME 90%",value:0,red:"#4a809b"},
// {name:"MAX:HOT_OK",text:"TRANSFER Accounts Hash - OK",value:0,red:"#2b6311"},
// {name:"MAX:HOT_COUNT_LEVELS",text:"TRANSFER Avg Levels count",value:0,red:"#39638a"},
// {name:"MAX:DELTA_TIME_ACTUAL",text:"Avg delta time (to all)",value:0,red:"#51448a"},
// {name:"MAX:DELTA_TIME_HOT",text:"Avg delta time (TRANSFER)",value:0,red:"#313f8a"},
];
var DiagramArrD=
[
{isLine:true,text:"Блоки"},
// {name:"ROWS_WRITE-TX",text:"ROWS_WRITE-TX",value:0,red:"#06A"},
// {name:"ROWS_WRITE_MS-TX",text:"ROWS_WRITE_MS-TX",value:0,red:"#ffb417"},
{name:"MAX:DELTA_TX",text:"MAX:DELTA_TX",value:0,red:"#ff4534"},
// {name:"COUNT_BLOCK_TX-TX",text:"COUNT_BLOCK_TX-TX",value:0,red:"#69c2ff"},
// {name:"ONWRITEBLOCKFINISH_MS-TX",text:"ONWRITEBLOCKFINISH_MS-TX",value:0,red:"#7081ff"},
// {name:"BLOCKPROCESS_1-TX",text:"BLOCKPROCESS_1-TX, ms",value:0,red:"#cd72ff"},
// {name:"BLOCKPROCESS_2-TX",text:"BLOCKPROCESS_2-TX, ms",value:0,red:"#cd72ff"},
// {name:"BLOCKPROCESS_3-TX",text:"BLOCKPROCESS_3-TX, ms",value:0,red:"#cd72ff"},
// {name:"BLOCKPROCESS_4-TX",text:"BLOCKPROCESS_4-TX, ms",value:0,red:"#cd72ff"},
{name:"MAX:TRANSACTION_COUNT",text:"Число транзакций в блоке (макс)",value:0,red:"#02A"},
{name:"MAX:LOADEDCHAINLIST",text:"Load chains, count",value:0,red:"#95d6b9"},
{name:"TRANSFER_TIME_OUT",text:"TRANSFER TIME OUT, count",value:0,red:"#ff353b"},
{isLine:true,text:"SYSTEM"},
{name:"TIME_IDLE",text:"HEALTH TIME, %",value:0,red:"#24aa47"},
{name:"MAX:CPU_SYS_MODE",text:"CPU USER SYS, мс",value:0,red:"#06A"},
{name:"MAX:CPU",text:"CPU WORK, мс",value:0,red:"#06A"},
{name:"MAX:MEMORY_USAGE",text:"Используемая память, Mb",value:300},
{name:"MAX:MEMORY_FREE",text:"Mem free, Mbyte",value:0,red:"#a1c3b9"},
// {name:"MAX:CPU_USER_MODE",text:"USER MODE, мс",value:0,red:"#06A"},
// {name:"MAX:CPU_SYS_MODE",text:"USER SYS, мс",value:0,red:"#06A"},
// {name:"MAX:CPU_IDLE_MODE",text:"USER IDLE, мс",value:0,red:"#0A6"},
//{name:"MAX:POWER-HASH**",text:"Hash Rate, Mh/s",value:0,red:"#95d6b9"},
{name:"HASHRATE",text:"Hash Rate,Mh/s",value:0,red:"#95d6b9"},
// {name:"MINING-COUNT",text:"MINING-COUNT",value:0,red:"#95d6b9"},
{name:"MAX:POWER",text:"MAX:POWER",value:0,red:"#597e6e"},
//{name:"POWER_MY_WIN",text:"POWER MY WIN",value:0,red:"#088a4a"},
{name:"POWER_BLOCKCHAIN",text:"POWER Blockchain",value:0,red:"#2b6311"},
// {name:"TIME_USE_PACKET",text:"Время выполнения пакета, мс",value:100},
{name:"MAX:MEDIAN_GLOB_TIME",text:"MEDIAN_GLOB_TIME",value:0,red:"#5e729b",zero:100},
{name:"MAX:DISP_MEDIAN_GLOB_TIME",text:"DISP_MEDIAN_GLOB_TIME 90%",value:0,red:"#4a809b"},
// {name:"MAX:DELTA_GLOB_TIME",text:"DELTA_GLOB_TIME",value:0,red:"#8b7a9b",zero:100},
// {name:"MAX:DISP_DELTA_GLOB_TIME",text:"DISP_DELTA_GLOB_TIME",value:0,red:"#9b747f"},
{name:"CORRECT_TIME_UP",text:"CORRECT_TIME_UP",value:0,red:"#449b7e"},
{name:"CORRECT_TIME_DOWN",text:"CORRECT_TIME_DOWN",value:0,red:"#9b8a3a"},
// {name:"MAX:TIME_DELTA",text:"TIME_DELTA",value:0,red:"#4d989b",line:1},
// {name:"MAX:BUSY_LEVEL",text:"BUSY_LEVEL",value:0,red:"#ff353b"},
// {name:"STOP_METHOD",text:"STOP_METHOD",value:0,red:"#8a3c40"},
{name:"AddToBan",text:"AddToBan",value:0,red:"#8a3d74"},
// {name:"TRANSFER_TIME_OUT",text:"TRANSFER TIME OUT, count",value:0,red:"#ff353b"},
{name:"NETCONFIGURATION",text:"NETCONFIGURATION",value:0,red:"#8a5663"},
// {name:"SEND:ADDLEVELCONNECT",text:"SEND:ADDLEVELCONNECT",value:0,red:"#8a5663"},
// {name:"GET:ADDLEVELCONNECT",text:"GET:ADDLEVELCONNECT",value:0,red:"#8a5663"},
//// {name:"NETCONFIGURATION",text:"NETCONFIGURATION",value:0,red:"#8a5663"},
//// {name:"NETCONFIGURATION",text:"NETCONFIGURATION",value:0,red:"#8a5663"},
//
// {name:"AddLevelConnect",text:"AddLevelConnect",value:0,red:"#755d8a"},
// {name:"DisconnectChild",text:"DisconnectChild",value:0,red:"#755d8a"},
// {name:"DeleteLevelConnect",text:"DeleteLevelConnect",value:0,red:"#755d8a"},
//// {name:"PONG-NotHot",text:"PONG-NotHot",value:0,red:"#755d8a"},
//
//// {name:"DISCONNECTHOT",text:"DISCONNECTHOT",value:0,red:"#755d8a"},
// {name:"StartCheckConnect",text:"StartCheckConnect",value:0,red:"#755d8a"},
//
// {name:"ClientConnected",text:"ClientConnected",value:0,red:"#755d8a"},
// {name:"ClientEnd",text:"ClientEnd",value:0,red:"#755d8a"},
// {name:"ClientClose",text:"ClientClose",value:0,red:"#755d8a"},
//
{isLine:true,text:"Ноды"},
{name:"MAX:CLUSTER_NODE",text:"=RUNING=",value:0,red:"#83a3d6"},
{name:"MAX:CLUSTER_NODE_HASH",text:"=RUNING OK HASH=",value:0,red:"#658a61"},
// {name:"MAX:CLUSTER_NODE_ACC_HASH",text:"=RUNING ACCOUNT HASH=",value:0,red:"#658a61"},
//{name:"MAX:COUNT_EQ_ADDR",text:"COUNT_EQ_ADDR",value:0,red:"#8a5663"},
{name:"MAX:ALL_NODES",text:"All nodes count",value:0,red:"#83a3d6"},
{name:"MAX:CONNECTED_NODES",text:"Connected nodes count",value:0,red:"#516e80"},
// {name:"MAX:AUTOCORRECT",text:"MAX:AUTOCORRECT",value:0,red:"#06A"},
{name:"MAX:MIN_VERSION",text:"MAX:MIN_VERSION",value:0,red:"#99eeff"},
{name:"MAX:HASH_OK",text:"Block chain Hash = OK",value:0,red:"#2b6311"},
{name:"MAX:CHECK_POINT_OK",text:"Check point = OK",value:0,red:"#356361"},
{name:"MAX:ACTUAL_OK",text:"Accounts Hash - OK",value:0,red:"#658a61"},
{name:"MAX:COUNTLH",text:"Nodes in Load History mode",value:0,red:"#83a3d6"},
{name:"MAX:HOT_NODES",text:"TRANSFER nodes, count",value:0,red:"#063c8a"},
//{name:"MAX:HOT_OK",text:"TRANSFER Accounts Hash - OK",value:0,red:"#2b6311"},
//{name:"MAX:HOT_COUNT_LEVELS",text:"TRANSFER Avg Levels count",value:0,red:"#39638a"},
//{name:"MAX:DELTA_TIME_ACTUAL",text:"Avg delta time (to all)",value:0,red:"#51448a"},
//{name:"MAX:DELTA_TIME_HOT",text:"Avg delta time (TRANSFER)",value:0,red:"#313f8a"},
//{name:"GET:TRANSFER",text:"GET:TRANSFER",value:0,red:"#3b5d8a"},
{isLine:true,text:"NETWORK"},
{name:"GETDATA(KB)",text:"Packets receive, Kbyte",value:0,red:"#3b8a7f"},
{name:"SENDDATA(KB)",text:"Packets send, Kbyte",value:0,red:"#2b1e8a"},
{isLine:true,text:"Пакеты полученные"},
//{name:"TEST_PACKET",text:"TEST_PACKET",value:0,red:"#2b1e8a"},
//{name:"GETDATA(KB)",text:"Получено, кбайт",value:0,red:"#2b1e8a"},
// {name:"LOADFRAGMENT",text:"Получено фрагментов",value:0,red:"#20728a"},
// {name:"LOADPACKET",text:"Получено пакетов",value:0,red:"#7f448a"},
{name:"USEPACKET",text:"Исполнено пакетов",value:0,red:"#7f448a"},
//{name:"MAX:BUFFE_LOAD_SIZE",text:"Буфер загрузки, кб",value:0,red:"#7f448a"},
// {name:"SKIPFRAGMENTUSE",text:"SKIPFRAGMENTUSE",value:0},
// {name:"TIME_USE_PACKET",text:"Время выполнения пакетов, мс",value:100},
{name:"MAX:TIMEDOGETDATA",text:"MAX:Время получения пакета, мс",value:100},
{name:"MAX:TIME_USE_PACKET",text:"MAX:Время выполнения пакета, мс",value:100},
//{name:"TRANSFER",text:"Обработка пакета TRANSFER, мс",value:90},
//{name:"MAX:TimeDoGetData",text:"Макс время обработки полученного пакета, мс",value:25},
{name:"ERRORS",text:"ERRORS",value:0,red:"#A00"},
// {name:"SEND_ERROR",text:"Ожидание статуса сокета",value:0,red:"#500"},
// {isLine:true,text:"Пакеты отправленные"},
// {name:"SENDDATA(KB)",text:"Отправлено, кбайт",value:0,red:"#2b1e8a"},
// {name:"SEND_TRAFFIC_FREE",text:"SEND_TRAFFIC_FREE",value:0,red:"#2b1e8a"},
// {name:"SEND_DATA_HARD",text:"Отправлено Hard, кбайт",value:0,red:"#2b1e8a"},
// {name:"SEND_DATA_LIGHT",text:"Отправлено Light, кбайт",value:0,red:"#2b1e8a"},
//{name:"RECALCSENDSTATICTIC",text:"RECALCSENDSTATICTIC",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30000",text:"NODE_TRAFFIC_LIMIT:30000, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30001",text:"NODE_TRAFFIC_LIMIT:30001, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_BUF_WRITE:30000",text:"MAX:NODE_BUF_WRITE:30000, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_SEND_BUF_PACKET_COUNT:30000",text:"MAX:NODE_SEND_BUF_PACKET_COUNT:30000",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30000",text:"LIMIT:30000, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30001",text:"LIMIT:30001, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30006",text:"LIMIT:30006, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_TRAFFIC_LIMIT:30007",text:"LIMIT:30007, кбайт",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_SEND_BUF_PACKET_COUNT:30006",text:"MAX:NODE_SEND_BUF_PACKET_COUNT:30006",value:0,red:"#2b1e8a"},
// {name:"MAX:NODE_BUF_WRITE:30006",text:"MAX:NODE_BUF_WRITE:30006, кбайт",value:0,red:"#2b1e8a"},
// {name:"SENDFRAGMENT_H",text:"Отправлено H-фрагментов, кбайт",value:0,red:"#20728a"},
// {name:"SENDFRAGMENT_L",text:"Отправлено L-фрагментов, кбайт",value:0,red:"#20728a"},
// {name:"FRAGMENT_LOST",text:"Потерянные фрагменты",value:0},
// {name:"FRAGMENT_OVERFLOW",text:"Переполнение массива отправленных фрагментов",value:0},
// {name:"SKIPFRAGMENTSEND",text:"SKIPFRAGMENTSEND",value:0},
//
// {isLine:true,text:"Headers"},
// {name:"SEND:GETBLOCKHEADER:30001",text:"SEND:GETBLOCKHEADER:30001",value:0,red:"#2b1e8a"},
// {name:"GET:RETBLOCKHEADER:30001",text:"GET:RETBLOCKHEADER:30001",value:0,red:"#658a61"},
// {name:"SEND:GETBLOCKHEADER:30002",text:"SEND:GETBLOCKHEADER:30002",value:0,red:"#2b1e8a"},
// {name:"GET:RETBLOCKHEADER:30002",text:"GET:RETBLOCKHEADER:30002",value:0,red:"#658a61"},
//
//
// {isLine:true,text:"Blocks"},
// {name:"SEND:GETBLOCK:30001",text:"SEND:GETBLOCK:30001",value:0,red:"#2b1e8a"},
// {name:"GET:RETGETBLOCK:30001",text:"GET:RETGETBLOCK:30001",value:0,red:"#658a61"},
// {name:"SEND:GETBLOCK:30002",text:"SEND:GETBLOCK:30002",value:0,red:"#2b1e8a"},
// {name:"GET:RETGETBLOCK:30002",text:"GET:RETGETBLOCK:30002",value:0,red:"#658a61"},
// {name:"SEND:GETBLOCK:30003",text:"SEND:GETBLOCK:30003",value:0,red:"#2b1e8a"},
// {name:"GET:RETGETBLOCK:30003",text:"GET:RETGETBLOCK:30003",value:0,red:"#658a61"},
// {name:"MAX:HIGHT",text:"MAX:HIGHT",value:0,red:"#83a3d6"},
// {name:"NODE_CAN_GET:30000",text:"NODE_CAN_GET: 30000",value:0,red:"#2b1e8a"},
// {name:"NODE_CAN_GET:30001",text:"NODE_CAN_GET: 30001",value:0,red:"#2b1e8a"},
// {name:"NODE_CAN_GET:30006",text:"NODE_CAN_GET: 30006",value:0,red:"#2b1e8a"},
//{name:"BLOCK_SEND",text:"Отдано блоков (план)",value:0,red:"#bea96d"},
// {name:"SEND:RETGETBLOCK",text:"Отдано блоков (факт)",value:0,red:"#bea96d"},
//{name:"DELETE_OLD_PACKET",text:"Удалено устаревших пакетов",value:0,red:"#bea96d"},
// {name:"BLOCK_SEND_MEM",text:"Отдано блоков из памяти",value:0,red:"#e6e349"},
// {name:"DO_GETNEXTNODE-1",text:"DO_GETNEXTNODE-1",value:0,red:"#bea96d"},
// {name:"DO_GETNEXTNODE-2",text:"DO_GETNEXTNODE-2",value:0,red:"#bea96d"},
// {name:"SEND:GETBLOCK",text:"Запрошено блоков",value:0,red:"#bea96d"},
//
// {name:"BLOCK_LOADED",text:"Получено блоков",value:0,red:"#95d6b9"},
// {name:"DOUBLE_RETGETBLOCK",text:"Получено блоков повторно",value:0,red:"#e6e349"},
// {name:"WRITECHAIN_TO_DB_COUNT",text:"Загруженные цепочки блоков",value:0},
// {name:"WRITECHAIN_TO_DB_TIME",text:"Время записи цепочек, ms",value:0},
//
//
//// {name:"WRITECHAIN_TO_DB_TIME",text:"Время обработки цепочки блоков, мс",value:90},
// {name:"WriteBlockDB",text:"Время записи блоков на диск, мс",value:50},
// {name:"MAX:WriteBlockDB",text:"Макс время записи блока на диск, мс",value:50},
// {name:"BlockToMemBuf",text:"Время BlockToMemBuf, мс",value:25},
// {name:"IsValidTransaction",text:"Время IsValidTransaction, мс",value:25},
// {name:"MAX:TimeDoGetData:RETBLOCKHEADER",text:"MAX:TimeDoGetData:RETBLOCKHEADER, мс",value:25},
// {name:"MAX:TimeDoGetData:RETGETBLOCK",text:"MAX:TimeDoGetData:RETGETBLOCK, мс",value:25},
// {name:"MAX:TimeDoGetData:TRANSFER",text:"MAX:TimeDoGetData:TRANSFER, мс",value:25},
//{name:"MAX:TimeDoGetData:GETBLOCK",text:"MAX:TimeDoGetData:GETBLOCK, мс",value:25},
// {isLine:true,text:"Ключи (индексы)"},
// {name:"MAX:CountForFlush",text:"Незаписанные на диск ключи, шт",value:1000},
// {name:"MAX:TimeFlush",text:"Макс время записи ключа на диск, мс",value:11},
// {name:"MAX:DOUBLE_FIND_KEY",text:"Коллизии хеш функции",value:32},
// {name:"SCAN_ROW_KEY",text:"Перебор строк ключей",value:30000},
// {name:"SCAN_BODY",text:"Чтение строк содержимого хешей",value:10},
// {name:"TimeKeyMove",text:"Время переноса ключей на следующий уровень, мс",value:50},
// {name:"MAX:TimeKeyMove",text:"Макс время переноса ключей на следующий уровень, мс",value:10},
// {isLine:true,text:"Операции над ключами"},
// {name:"OPERATION_KEY_DB_FIND",text:"FIND",value:0,red:"#06A"},
// {name:"OPERATION_KEY_DB_MOVEKEY",text:"MOVEKEY",value:0,red:"#06A"},
// {name:"OPERATION_KEY_DB_WRITE",text:"WRITE",value:0,red:"#06A"},
// {name:"OPERATION_KEY_DB_DELETE",text:"DELETE",value:0,red:"#06A"},
];
var IsDevelopAccount=0;
function InitDiagram()
{
var ArrSystem;
if(IsDevelopAccount)
{
ArrSystem=DiagramArrD;
}
else
{
ArrSystem=DiagramArrR;
}
var StrArr=localStorage["DiagramArr"];
if(StrArr && StrArr!=="undefined")
{
DiagramArr=JSON.parse(StrArr);
}
else
{
DiagramArr=[].concat(JSON.parse(JSON.stringify(ArrSystem)));
}
DiagramArr.push(ExternDiagramItem);
DiagramMap[ExternDiagramItem.name]=ExternDiagramItem;
DiagramMapId[ExternDiagramItem.id]=ExternDiagramItem;
InitDiagramByArr(DiagramArr,1100);
localStorage["ExternSetDiagramArr"]="";
}
function DeleteDiagram(id)
{
var Item=DiagramMapId[id];
if(Item)
{
var element2=document.getElementById("B"+id);
element2.innerHTML="";
Item.Delete=1;
localStorage["DiagramArr"]=JSON.stringify(DiagramArr);
}
}
function AddDiagram()
{
var Name=document.getElementById("idNameDiagram").value.trim();
var Item={name:Name,text:Name,value:0,red:"#5681b6"};
if(Name.substr(0,1)==="-")
{
Item.text=Name.substr(1);
Item.isLine=1;
}
AddDiagramToArr(DiagramArr,Item);
SetHTMLDiagramItem(Item,1100);
localStorage["DiagramArr"]=JSON.stringify(DiagramArr);
}
function ResetDiagrams()
{
var diargams = document.getElementById("diargams");
diargams.innerHTML="";
localStorage["DiagramArr"]="";
InitDiagram();
}
function ClearDiagrams()
{
var diargams = document.getElementById("diargams");
diargams.innerHTML="";
localStorage["DiagramArr"]="[]";
InitDiagram();
}
function GetDiagram()
{
var arrNames=[];
for(var i=0;i<DiagramArr.length;i++)
{
var Str;
var Item=DiagramArr[i];
if(!Item.isLine)
{
arrNames.push(Item.name);
}
}
GetData("GetArrStats",arrNames,function (Data)
{
if(!Data || !Data.result)
return;
SetStatInfo(Data);
var arr=Data.arr;
for(var i=0;i<arr.length;i++)
{
var ItemServer=arr[i];
var ItemClient=DiagramMap[ItemServer.name];
if(!ItemClient || ItemClient.Extern)
continue;
ItemClient.arr=ItemServer.arr;
ItemClient.AvgValue=ItemServer.AvgValue;
ItemClient.steptime=ItemServer.steptime;
//ItemClient.starttime=ItemServer.starttime;
DrawDiagram(ItemClient);
}
});
}
function ResizeArr222(arr)
{
var arr2=[];
for(var i=0;i<arr.length/2;i++)
{
arr2[i]=Math.max(arr[i*2],arr[i*2+1]);
}
return arr2;
}
//INIT
function UpdateData()
{
if(bPause)
return;
GetDiagram();
}
function LoadValues()
{
if(!localStorage["WasSaveMonitor3"])
return;
document.getElementById("idBlockNum").value=localStorage["MonitoridBlockNum"];
document.getElementById("idBlockCount").value=localStorage["MonitoridBlockCount"];
document.getElementById("idMiner").value=localStorage["MonitoridMiner"];
document.getElementById("idAdviser").value=localStorage["MonitoridAdviser"];
}
function SaveValues()
{
localStorage["WasSaveMonitor3"]=1;
localStorage["MonitoridBlockNum"]=document.getElementById("idBlockNum").value;
localStorage["MonitoridBlockCount"]=document.getElementById("idBlockCount").value;
localStorage["MonitoridMiner"]=document.getElementById("idMiner").value;
localStorage["MonitoridAdviser"]=document.getElementById("idAdviser").value;
}
window.onload=function()
{
SetPause(0);
GetData("GetWalletInfo",{}, function (Data)
{
if(Data && Data.result)
{
IsDevelopAccount=Data.IsDevelopAccount;
InitDiagram();
}
});
setInterval(function ()
{
if(localStorage["ExternSetDiagramArr"])
{
InitDiagram();
}
},300);
setInterval(UpdateData,900);
//COMMON MOUSE MOVING
window.onmousemove = function(event)
{
SetDiagramMouseX(event);
}
window.onkeydown = function (e)
{
if(e.keyCode===27)
{
window.close();
}
else
if(e.keyCode===13)
{
GetBlockchainStat();
}
};
LoadValues();
//document.body.className="univers "+localStorage["idSelStyle"];
}
var ExternDiagramItem={name:"Blockchain Hash Rate MH/s",text:"-----",value:0,red:"#078a63",Extern:1,id:"idBlockchainStat"}
function GetBlockchainPrev()
{
var BlockNum=ParseNum(document.getElementById("idBlockNum").value);
var Count=ParseNum(document.getElementById("idBlockCount").value);
BlockNum-=Count;
if(BlockNum<0)
BlockNum=0;
document.getElementById("idBlockNum").value=BlockNum;
GetBlockchainStat();
}
function GetBlockchainEnd()
{
GetData("GetWalletInfo",{}, function (Data)
{
if(Data && Data.result)
{
document.getElementById("idBlockNum").value=Data.BlockNumDB;
GetBlockchainPrev();
}
});
}
function GetBlockchainNext()
{
var BlockNum=ParseNum(document.getElementById("idBlockNum").value);
var Count=ParseNum(document.getElementById("idBlockCount").value);
BlockNum+=Count;
document.getElementById("idBlockNum").value=BlockNum;
GetBlockchainStat();
}
function GetBlockchainStat()
{
SaveValues();
var BlockNum=ParseNum(document.getElementById("idBlockNum").value);
var Count=ParseNum(document.getElementById("idBlockCount").value);
var Miner=ParseNum(document.getElementById("idMiner").value);
var Adviser=ParseNum(document.getElementById("idAdviser").value);
var bNonce=document.getElementById("idNonce").checked;
var bMinerLess=document.getElementById("idMinerLess").checked;
if(document.getElementById("idMiner").value==="")
Miner=-1;
GetData("GetBlockchainStat",{BlockNum:BlockNum,Count:Count,Miner:Miner,bMinerLess:bMinerLess,Adviser:Adviser,bNonce:bNonce}, function (Data)
{
if(Data && Data.result)
{
var BlockNum=ParseNum(document.getElementById("idBlockNum").value);
var ItemClient=ExternDiagramItem;
ItemClient.ArrList=Data.ArrList;
ItemClient.AvgValue=Data.AvgValue;
ItemClient.steptime=Data.steptime;
ItemClient.startnumber=BlockNum;
var bNonce=document.getElementById("idNonce").checked;
if(bNonce)
{
var arr=ItemClient.ArrList;
for(var i=0;i<arr.length;i++)
{
arr[i]=arr[i]/10000000;
}
}
DrawDiagram(ItemClient);
}
});
}
</script>
<style type="text/css">
#idBtEnd
{
font-family: monospace;
}
.delete
{
margin: 2px;
border: 0px;
background: #FFF;
color: #cffffa;
}
.delete:hover
{
margin: 2px;
border: 1px solid #000;
color:#000;
}
</style>
<style type="text/css">
#topframe
{
z-index:1000;
position:fixed;
top:0px;
left:0px;
text-align: center;
width:600px;
}
#idRun, #idStatButton
{
width:100px;
}
</style>
<body>
<DIV align='center'>
<DIV id="topframe">
<INPUT type="button" style="float:left" onclick="SetPause()" id="idRun">
<INPUT type="button" style="float:left" onclick="ClearStat()" id="idClearStat" value="Clear stat">
<INPUT type="button" style="float:left" onclick="SetStatMode()" id="idStatButton">
<DIV align='left'><B id="idStatInfo"></B></DIV>
</DIV>
<BR>
<BR>
<BR>
<DIV style="text-align: center;">Blockchain Power</DIV>
Adviser:<INPUT type="search" id="idAdviser" style="width:50px" >
Miner:
&lt;=<INPUT type="checkbox" id="idMinerLess" style="margin:1px" >
<INPUT type="search" id="idMiner" style="width:50px" value="">
Nonce:<INPUT type="checkbox" id="idNonce" style="margin:1px" >
Block start:<INPUT type="number" id="idBlockNum" style="width:80px" value="0"> length:<INPUT type="number" id="idBlockCount" style="width:80px" value="3600">
<INPUT type="button" onclick="GetBlockchainPrev()" value="Prev">
<INPUT type="button" onclick="GetBlockchainNext()" value="Next">
<INPUT type="button" onclick="GetBlockchainEnd()" id="idBtEnd" value="->|">
<INPUT type="button" onclick="GetBlockchainStat()" value="Update">
<!--<DIV style="text-align: center;">Blockchain Hashrate, MH/s</DIV>-->
<BR>
<canvas class="DIAGRAM" width='1100' height='200' id='idBlockchainStat'></canvas>
<DIV id="diagr_content" align='center'>
<DIV id="diargams" align='center'>
</DIV>
</DIV>
<BR>
<BR>
New diagram<INPUT type="string" id="idNameDiagram" style="width:250px" value="">
<INPUT type="button" onclick="AddDiagram()" value="Add">
<INPUT type="button" onclick="ResetDiagrams()" value="Reset">
<INPUT type="button" onclick="ClearDiagrams()" value="Clear">
<BR>
<BR>
<BR>
</DIV>
</body>
</html>

522
Source/HTML/network.html Normal file
View File

@ -0,0 +1,522 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Network</title>
<link rel="shortcut icon" href="/HTML/PIC/network.png" type="image/png">
<link rel="stylesheet" type="text/css" href="../HTML/CSS/buttons.css">
<!--<link rel="stylesheet" type="text/css" href="../HTML/CSS/style.css">-->
</head>
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="../HTML/JS/client.js"></script>
<script>
var MaxChildCount=7;//MAX_CONNECT_CHILD
var SaveIdArr=["idMaxNodesCount"];
var NodesArr=[];
var CurNode;
function SetStatus(Str)
{
var id = $("idStatus");
id.innerHTML=Str;
}
var WasSetName;
var WasSetProperty;
var WasSetInfo;
function SetInfo(Name,StrProperty,StrInfo)
{
var id;
if(WasSetName!==Name)
{
WasSetName=Name;
id = $("idNodeName");
id.innerHTML="<B>"+Name+"</B>";
}
if(WasSetProperty!==StrProperty)
{
WasSetProperty=StrProperty;
id = $("idNodeProperty");
id.value=StrProperty;
}
if(WasSetInfo!==StrProperty)
{
WasSetInfo=StrProperty;
id = $("idNodeLog");
id.value=StrInfo;
}
}
function UpdateData()
{
var CountBlock=ParseNum($("idCountBlock").value);
GetData("/GetHotArray",{CountBlock:CountBlock}, function (Data)
{
if(Data && Data.result)
{
SetHotTable(Data.ArrTree);
}
});
}
function SetHotTable(ArrTree)
{
var htmlTable=$("grid_hot");
if(!htmlTable.ItemsMap)
{
htmlTable.RowCounts=0;
htmlTable.ItemsMap=[];
}
var map=htmlTable.ItemsMap;
var MaxNode=ParseNum($("idMaxNodesCount").value);
//Hot
htmlTable.RowCounts=Math.max(htmlTable.RowCounts,ArrTree.length);
for(var Level=0;Level<htmlTable.RowCounts;Level++)
{
var arr=ArrTree[Level];
if(!arr)
arr=[];
var row=map[Level];
if(!row)
{
htmlTable.RowCount++;
row=htmlTable.insertRow(-1);
map[Level]=row;
for(var n=0;n<MaxChildCount+3;n++)
{
row.insertCell(n);
}
row.MaxRows=2;
}
row.cells[0].innerText=1+Level;
var StrConnect="";
var StrActive="";
var CountNodesA=0;
var CountNodesC=0;
var length=Math.max(MaxChildCount,arr.length)
length=Math.min(length,MaxNode);
for(var n=0;n<length;n++)
{
var Node=undefined;
var Str="";
var Name="";
if(n<arr.length)
{
Node=arr[n];
NodesArr[Node.id]=Node;
if(Node.Name)
Name=Node.Name;
else
Name=Node.addrStr.substr(0,6);
Str+=Name;
Str+="="+Node.BlockProcessCount+" ";
if(Node.Name)
strClass="mnode";
else
strClass="node";
Str='<INPUT type="button" id="N'+Node.id+'" class="'+strClass+'" onclick="ViewInfo('+Node.id+',1)" value="'+Str+'">';
if(Node.Hot)
Str+="<BR>";
if(!Node.Active)
Str+='<INPUT type="button" class="connect" onclick="AddConnect('+Node.id+')" value="Con...">';
if(!Node.Hot && Node.Active)
Str+='<INPUT type="button" class="edit" onclick="AddHot('+Node.id+')" value="Add">';
if(Node.Hot)
Str+='<INPUT type="button" class="edit" onclick="DeleteNode('+Node.id+')" value="Del">';
if(!Node.Name && Node.Active)
Str+='<INPUT type="button" class="edit" onclick="AddBan('+Node.id+')" value="Ban">';
Str+="<BR>";
}
if(n<MaxChildCount)
{
var cell=row.cells[n+1];
if(Node && Node.Hot)
{
var id=$("S"+Node.id);
if(!id || cell.NodeID!==Node.id)
{
var Stat="<DIV id='S"+Node.id+"'></DIV>";
cell.innerHTML=Stat+Str;
cell.NodeID=Node.id;
id=$("S"+Node.id);
}
var StrTransfer,StrDelta,StrGetTiming;
if(Node.TransferCount>1000)
{
StrTransfer="<B>"+Node.TransferCount+"</B>";
}
else
{
StrTransfer=Node.TransferCount;
}
StrDelta=Node.DeltaTime;
// if(Node.DeltaTime<100)
// {
// StrDelta="<B style='color:#1727ff'>"+Node.DeltaTime+"</B>";
// }
// else
// {
// StrDelta=Node.DeltaTime;
// }
if(Node.GetTiming>2)
StrGetTiming="<B style='color:red'>"+Node.GetTiming+"</B>";
else
if(Node.GetTiming>1)
StrGetTiming="<B style='color:#df7a59'>"+Node.GetTiming+"</B>";
else
StrGetTiming="<B style='color:#1727ff'>"+Node.GetTiming+"</B>";
var Str=
"Transfer:"+StrTransfer+"<BR>"+
"Process:"+Node.BlockProcessCount+"<BR>"+
"Time:"+StrGetTiming+"<BR>"+
"Delta:"+StrDelta;
id.innerHTML=Str;
}
else
{
cell.innerHTML="";
}
}
if(Node && !Node.Active)
{
CountNodesC++;
StrConnect+=Str;
}
if(Node && !Node.Hot && Node.Active)
{
CountNodesA++;
StrActive+=Str;
}
}
row.MaxRows=Math.max(row.MaxRows,CountNodesA,CountNodesC);
for(var i=CountNodesC;i<row.MaxRows;i++)
{
StrConnect+="<DIV class='node'></DIV>"
}
if(row.StrActive!==StrActive)
{
var cell=row.cells[MaxChildCount+1];
row.StrActive=StrActive;
cell.innerHTML=StrActive;
}
if(row.StrConnect!==StrConnect)
{
var cell=row.cells[MaxChildCount+2];
row.StrConnect=StrConnect;
cell.innerHTML=StrConnect;
}
}
ViewInfo(CurNode);
}
function ViewInfo(Index,bSet)
{
if(Index!==undefined)
{
if(bSet)
CurNode=Index;
var Node=NodesArr[Index];
if(Node)
{
var Name;
if(Node.Name)
Name=Node.Name;
else
Name=Node.addrStr.substr(0,6);
var Info=Node.Info;
Node.Info=undefined;
var Str=JSON.stringify(Node,"",2);
Node.Info=Info;
SetInfo(Name,Str,Info);
//SetInfo(escapeHtml(Name+"\n"+Str+"\n"+Node.Info));
}
else
SetInfo("Not found","","");
}
}
function AddConnect(Index)
{
var Node=NodesArr[Index];
if(Node)
{
var Code='var Node=SERVER.NodesMap["'+Node.addrStr+'"]; Node.NextConnectDelta=1000; Node.CreateConnect();"OK"';
RunCode(Code);
}
}
function AddBan(Index)
{
var Node=NodesArr[Index];
if(Node)
{
var Code='var Node=SERVER.NodesMap["'+Node.addrStr+'"]; SERVER.AddToBan(Node,"=BAN=");"OK"';
RunCode(Code);
}
}
function AddHot(Index)
{
var Node=NodesArr[Index];
if(Node)
{
var Code='var Node=SERVER.NodesMap["'+Node.addrStr+'"]; SERVER.StartAddLevelConnect(Node);"OK"';
RunCode(Code);
}
}
function DeleteNode(Index)
{
var Node=NodesArr[Index];
if(Node)
{
var Code='var Node=SERVER.NodesMap["'+Node.addrStr+'"]; SERVER.StartDisconnectHot(Node,"=DEL=",1);"OK"';
RunCode(Code);
}
}
function RunCode(Code)
{
GetData("SendDirectCode",{Code:Code}, function (Data)
{
if(Data)
{
SetStatus(Data.text);
}
});
}
function CheckCtrlEnter(e,F)
{
// SaveValues();
//
// if(e.ctrlKey && e.keyCode===13)
// {
// SendToServer();
// }
//
// if(e.keyCode===27)
// {
// window.close();
// }
}
function CheckDevelop()
{
GetData("GetWalletInfo",{},function (Data)
{
if(Data && Data.result)
{
if(!Data.IsDevelopAccount)
{
}
}
});
}
window.onload=function()
{
UpdateData();
setInterval(UpdateData,1000);
//setTimeout(CheckDevelop,500);
window.onkeydown = CheckCtrlEnter;
LoadValues();
SetStatus("");
document.body.className="univers "+localStorage["idSelStyle"];
}
function LoadValues()
{
if(LoadValuesByArr(SaveIdArr))
{
if(!$("idMaxNodesCount").value)
$("idMaxNodesCount").value=10;
}
}
function SaveValues()
{
SaveValuesByArr(SaveIdArr);
}
</script>
<style type="text/css">
table
{
border-collapse: collapse;
width:100%;
font-size: small;
}
.hot_nodes th, .hot_nodes td
{
border: 1px solid #264378;
padding: 4px;
}
.hot_nodes td
{
width: 100px;
text-align: left;
padding: 1px;
}
.hot_nodes td:nth-child(1)
{
width: 20px;
text-align: center;
}
.hot_nodes td:nth-child(9)
{
width: 170px;
}
.hot_nodes td:nth-child(10)
{
width: 160px;
}
.mnode
{
width: 100px;
font-weight: 700;
font-size: 9pt;
height: 20px;
}
.node
{
width: 100px;
font-size: 9pt;
height: 20px;
}
.edit
{
width: 35px;
font-size: 9pt;
}
.connect
{
width: 60px;
font-size: 9pt;
}
#idNodeBlock
{
position: fixed;
top: 10px;
left: 1200px;
width: 650px;
height: 920px;
font-size: 11pt;
}
#idNodeName
{
height: 20px;
width: 100%;
text-align: center;
}
#idNodeProperty
{
height: 280px;
width: 100%;
}
#idNodeLog
{
height: 600px;
width: 100%;
}
</style>
<body>
<DIV align='center'>
<B>NETWORK</B><BR>
Max nodes on level: <INPUT type="number" id="idMaxNodesCount" style="width:80px" value="10" onchange="SaveValues()" onkeyup="SaveValues()">
<INPUT type="number" id="idCountBlock" style="width:80px" value="4">
<DIV id="idStatus" style="height: 20px;"></DIV><BR>
<DIV align='left' style="width: 1190px;height: 870px; float: left">
<table id="grid_hot" class="hot_nodes">
<tr>
<th>L</th>
<th class="mnode">Node1</th>
<th class="mnode">Node2</th>
<th class="mnode">Node3</th>
<th class="mnode">Node4</th>
<th class="mnode">Node5</th>
<th class="mnode">Node6</th>
<th class="mnode">Node7</th>
<th>Connected</th>
<th>Not connected</th>
</tr>
</table>
</DIV>
<DIV id="idNodeBlock" style="float: left; border: 0px solid #bfc1c0; text-align: left">
<DIV id="idNodeName"></DIV>
<textarea rows="5" cols="250" id="idNodeProperty" style="width: 99%;">
</textarea>
<textarea rows="5" cols="250" id="idNodeLog" style="width: 99%;">
</textarea>
</DIV>
</DIV>
</body>
</html>

339
Source/HTML/password.html Normal file
View File

@ -0,0 +1,339 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Password</title>
<script>
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
function Mesh(s,Count)
{
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
for (n = 0; n < Count; n += 2)//48
{
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
s[0] ^= h;
s[1] ^= l;
s[10] ^= h;
s[11] ^= l;
s[20] ^= h;
s[21] ^= l;
s[30] ^= h;
s[31] ^= l;
s[40] ^= h;
s[41] ^= l;
h = c0 ^ ((c4 << 1) | (c5 >>> 31));
l = c1 ^ ((c5 << 1) | (c4 >>> 31));
s[2] ^= h;
s[3] ^= l;
s[12] ^= h;
s[13] ^= l;
s[22] ^= h;
s[23] ^= l;
s[32] ^= h;
s[33] ^= l;
s[42] ^= h;
s[43] ^= l;
h = c2 ^ ((c6 << 1) | (c7 >>> 31));
l = c3 ^ ((c7 << 1) | (c6 >>> 31));
s[4] ^= h;
s[5] ^= l;
s[14] ^= h;
s[15] ^= l;
s[24] ^= h;
s[25] ^= l;
s[34] ^= h;
s[35] ^= l;
s[44] ^= h;
s[45] ^= l;
h = c4 ^ ((c8 << 1) | (c9 >>> 31));
l = c5 ^ ((c9 << 1) | (c8 >>> 31));
s[6] ^= h;
s[7] ^= l;
s[16] ^= h;
s[17] ^= l;
s[26] ^= h;
s[27] ^= l;
s[36] ^= h;
s[37] ^= l;
s[46] ^= h;
s[47] ^= l;
h = c6 ^ ((c0 << 1) | (c1 >>> 31));
l = c7 ^ ((c1 << 1) | (c0 >>> 31));
s[8] ^= h;
s[9] ^= l;
s[18] ^= h;
s[19] ^= l;
s[28] ^= h;
s[29] ^= l;
s[38] ^= h;
s[39] ^= l;
s[48] ^= h;
s[49] ^= l;
b0 = s[0];
b1 = s[1];
b32 = (s[11] << 4) | (s[10] >>> 28);
b33 = (s[10] << 4) | (s[11] >>> 28);
b14 = (s[20] << 3) | (s[21] >>> 29);
b15 = (s[21] << 3) | (s[20] >>> 29);
b46 = (s[31] << 9) | (s[30] >>> 23);
b47 = (s[30] << 9) | (s[31] >>> 23);
b28 = (s[40] << 18) | (s[41] >>> 14);
b29 = (s[41] << 18) | (s[40] >>> 14);
b20 = (s[2] << 1) | (s[3] >>> 31);
b21 = (s[3] << 1) | (s[2] >>> 31);
b2 = (s[13] << 12) | (s[12] >>> 20);
b3 = (s[12] << 12) | (s[13] >>> 20);
b34 = (s[22] << 10) | (s[23] >>> 22);
b35 = (s[23] << 10) | (s[22] >>> 22);
b16 = (s[33] << 13) | (s[32] >>> 19);
b17 = (s[32] << 13) | (s[33] >>> 19);
b48 = (s[42] << 2) | (s[43] >>> 30);
b49 = (s[43] << 2) | (s[42] >>> 30);
b40 = (s[5] << 30) | (s[4] >>> 2);
b41 = (s[4] << 30) | (s[5] >>> 2);
b22 = (s[14] << 6) | (s[15] >>> 26);
b23 = (s[15] << 6) | (s[14] >>> 26);
b4 = (s[25] << 11) | (s[24] >>> 21);
b5 = (s[24] << 11) | (s[25] >>> 21);
b36 = (s[34] << 15) | (s[35] >>> 17);
b37 = (s[35] << 15) | (s[34] >>> 17);
b18 = (s[45] << 29) | (s[44] >>> 3);
b19 = (s[44] << 29) | (s[45] >>> 3);
b10 = (s[6] << 28) | (s[7] >>> 4);
b11 = (s[7] << 28) | (s[6] >>> 4);
b42 = (s[17] << 23) | (s[16] >>> 9);
b43 = (s[16] << 23) | (s[17] >>> 9);
b24 = (s[26] << 25) | (s[27] >>> 7);
b25 = (s[27] << 25) | (s[26] >>> 7);
b6 = (s[36] << 21) | (s[37] >>> 11);
b7 = (s[37] << 21) | (s[36] >>> 11);
b38 = (s[47] << 24) | (s[46] >>> 8);
b39 = (s[46] << 24) | (s[47] >>> 8);
b30 = (s[8] << 27) | (s[9] >>> 5);
b31 = (s[9] << 27) | (s[8] >>> 5);
b12 = (s[18] << 20) | (s[19] >>> 12);
b13 = (s[19] << 20) | (s[18] >>> 12);
b44 = (s[29] << 7) | (s[28] >>> 25);
b45 = (s[28] << 7) | (s[29] >>> 25);
b26 = (s[38] << 8) | (s[39] >>> 24);
b27 = (s[39] << 8) | (s[38] >>> 24);
b8 = (s[48] << 14) | (s[49] >>> 18);
b9 = (s[49] << 14) | (s[48] >>> 18);
s[0] = b0 ^ (~b2 & b4);
s[1] = b1 ^ (~b3 & b5);
s[10] = b10 ^ (~b12 & b14);
s[11] = b11 ^ (~b13 & b15);
s[20] = b20 ^ (~b22 & b24);
s[21] = b21 ^ (~b23 & b25);
s[30] = b30 ^ (~b32 & b34);
s[31] = b31 ^ (~b33 & b35);
s[40] = b40 ^ (~b42 & b44);
s[41] = b41 ^ (~b43 & b45);
s[2] = b2 ^ (~b4 & b6);
s[3] = b3 ^ (~b5 & b7);
s[12] = b12 ^ (~b14 & b16);
s[13] = b13 ^ (~b15 & b17);
s[22] = b22 ^ (~b24 & b26);
s[23] = b23 ^ (~b25 & b27);
s[32] = b32 ^ (~b34 & b36);
s[33] = b33 ^ (~b35 & b37);
s[42] = b42 ^ (~b44 & b46);
s[43] = b43 ^ (~b45 & b47);
s[4] = b4 ^ (~b6 & b8);
s[5] = b5 ^ (~b7 & b9);
s[14] = b14 ^ (~b16 & b18);
s[15] = b15 ^ (~b17 & b19);
s[24] = b24 ^ (~b26 & b28);
s[25] = b25 ^ (~b27 & b29);
s[34] = b34 ^ (~b36 & b38);
s[35] = b35 ^ (~b37 & b39);
s[44] = b44 ^ (~b46 & b48);
s[45] = b45 ^ (~b47 & b49);
s[6] = b6 ^ (~b8 & b0);
s[7] = b7 ^ (~b9 & b1);
s[16] = b16 ^ (~b18 & b10);
s[17] = b17 ^ (~b19 & b11);
s[26] = b26 ^ (~b28 & b20);
s[27] = b27 ^ (~b29 & b21);
s[36] = b36 ^ (~b38 & b30);
s[37] = b37 ^ (~b39 & b31);
s[46] = b46 ^ (~b48 & b40);
s[47] = b47 ^ (~b49 & b41);
s[8] = b8 ^ (~b0 & b2);
s[9] = b9 ^ (~b1 & b3);
s[18] = b18 ^ (~b10 & b12);
s[19] = b19 ^ (~b11 & b13);
s[28] = b28 ^ (~b20 & b22);
s[29] = b29 ^ (~b21 & b23);
s[38] = b38 ^ (~b30 & b32);
s[39] = b39 ^ (~b31 & b33);
s[48] = b48 ^ (~b40 & b42);
s[49] = b49 ^ (~b41 & b43);
s[0] ^= RC[n];
s[1] ^= RC[n + 1];
}
};
function GetHexFromArr(arr)
{
var Str="";
for(var i=0;arr && i<arr.length;i++)
{
if(!arr[i])
Str+="00";
else
{
var Val=arr[i]&255;
var A=Val.toString(16);
if(A.length===1)
A="0"+A;
Str=Str+A;
}
}
return Str.toUpperCase();
}
function WriteNumToArr0(body,Num)
{
body[0] ^=Num&0xFF;
body[1] ^=(Num>>>8) & 0xFF;
body[2] ^=(Num>>>16) & 0xFF;
body[3] ^=(Num>>>24) & 0xFF;
}
function ClientHex(Str)
{
var arr0=[0,0,0,0];
for(var i=0;i<Str.length;i++)
arr0[4+i]=Str.charCodeAt(i);
for(var nonce=0;nonce<1000000;nonce++)
{
var arr=[];
for(var i=0;i<arr0.length;i++)
arr[i]=arr0[i];
WriteNumToArr0(arr,nonce);
Mesh(arr,60);
if((arr[0]&255)===0 && (arr[1]&255)===0)
return GetHexFromArr(arr)+"-"+nonce;
}
return undefined;
}
function parseCookies (rc)
{
var list = {};
rc && rc.split(';').forEach(function( cookie )
{
var parts = cookie.split('=');
list[parts.shift().trim()] = decodeURI(parts.join('='));
});
return list;
}
function random(max)
{
ret=Math.floor(Math.random()*max);
return ret;
}
window.onload=function()
{
window.onkeydown = function (e)
{
if(e.keyCode===13)
{
SendPassword();
}
};
// document.getElementById("idPassword").focus();
// setTimeout(function ()
// {
// var password = document.getElementById("idPassword").value;
// if(password)
// SendPassword();
// },1000);
//
// SetStatus("Port="+window.location.port);
}
function SendPassword()
{
var port=window.location.port;
if(!port)
port="";
var list=parseCookies(document.cookie);
var id=list["token"+port];
var password = document.getElementById("idPassword").value;
var hash=ClientHex(id+"-"+password);
if(!hash)
{
console.log("Error find Hash")
return;
}
document.cookie = "hash"+port+"="+hash+";path=/";
window.location.reload();
}
</script>
<style type="text/css">
#idBlockPassword
{
z-index:1000;
position:fixed;
top:20%;
left:40%;
height:50px;
width:320px;
padding: 10px;
text-align: center;
box-shadow: 0 0 0 1px;
}
</style>
</head>
<body>
<DIV id="idBlockPassword">
ENTER PASSWORD
<BR>
<INPUT type="password" id="idPassword" autocomplete="password" autofocus > <INPUT type="button" onclick="SendPassword()" value="OK">
<DIV id="idStatus">
</DIV>
</DIV>
</body>
</html>

382
Source/HTML/stat.html Normal file
View File

@ -0,0 +1,382 @@
<!doctype html>
<html>
<head>
<title>Counters</title>
<meta charset='utf-8' />
<link rel="shortcut icon" href="/HTML/PIC/counters.png" type="image/png">
<link rel="stylesheet" type="text/css" href="/HTML/CSS/style.css">
</head>
<body>
<script>
window.RUN_CLIENT=1;
window.RUN_SERVER=0;
if(typeof global === 'object')
{
global.RUN_CLIENT=1;
global.RUN_SERVER=0;
}
</script>
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
<script type="text/javascript" src="../HTML/JS/client.js"></script>
<script type="text/javascript">
var TabbleStat,TableError;
var PrevData;
function SetResult(Data)
{
if(!Data)
Data=PrevData;
if(!Data || !Data.result)
return;
PrevData=Data;
var arrnames=["10s","10m","total, avg"];
var arrmult=[10,10*60,Data.period*10];
for(var i=0;i<arrmult.length;i++)
{
if(arrmult[i]>Data.period)
arrmult[i]=Data.period;
arrmult[i]=arrmult[i]/10;
}
var arrdata=[Data.stats.Counter10S,Data.stats.Counter10M,Data.stats.Counter];
var arrerr=[Data.errors.Counter10S,Data.errors.Counter10M,Data.errors.Counter];
//drawChart(arrdata,arrnames,arrmult);
SetStat(TabbleStat,arrdata);
SetStat(TableError,arrerr);
}
function ClearTableStat(htmlTable)
{
for(var i=htmlTable.rows.length-1;i>0;i--)
htmlTable.deleteRow(i);
htmlTable.StatItem={};
}
function SetStat(htmlTable,arr)
{
var StrFilter = document.getElementById("idFilter").value;
var rows=htmlTable.rows;
if(!htmlTable.StatItem)
{
htmlTable.StatItem={};
htmlTable.StatItem["Total"]=rows[1];
}
if(0)
for(var i=1;i<rows.length;i++)
rows[i].Do=1;
for(var m=0;m<arr.length;m++)
{
var Data=arr[m];
var Sum=0;
for(var name in Data)
{
if(name.indexOf("MAX:")!==-1)
continue;
var Count=Data[name];
if(Count)
{
Sum+=parseInt(Count);
}
}
Data["Total"]=Sum;
for(var name in Data)
{
var item=htmlTable.StatItem[name];
if(!item)
{
//index=htmlTable.rows.length;
var item=htmlTable.insertRow(1);
htmlTable.StatItem[name]=item;
item.insertCell(0);
for(var n=0;n<arr.length;n++)
{
item.insertCell(n+1);
}
item.cells[0].innerText=name;
item.insertCell(arr.length);
item.cells[arr.length+1].innerHTML='<INPUT type="button" class="add" onclick="AddDiagram(\''+name+'\')" value="Add">';
}
var Count=Math.floor(Data[name]);
item.cells[m+1].innerText=Count;
//item.visibility="visible";
if(StrFilter.length>0 && name.indexOf(StrFilter)==-1)
item.style="display:none";
else
item.style="";
item.Do=0;
}
}
if(0)
for(var i=1;i<rows.length;i++)
if(rows[i].Do===1)
for(var j=1;j<rows[i].cells.length-1;j++)
rows[i].cells[j].innerText="";
}
function AddDiagram(Name)
{
var Str=localStorage["DiagramArr"];
if(!Str|| Str==="undefined")
Str="[]";
var DiagramArr=JSON.parse(Str);
var Item={name:Name,text:Name,value:0,red:"#1c6bb6"};
AddDiagramToArr(DiagramArr,Item);
localStorage["DiagramArr"]=JSON.stringify(DiagramArr)
localStorage["ExternSetDiagramArr"]=1;
}
var bPause;
var StatMode;
function SetPause(SetMode)
{
if(SetMode===undefined)
{
bPause=!bPause;
}
else
{
bPause=SetMode;
}
var item = document.getElementById("idRun");
if(bPause)
item.value="Continue view";
else
item.value="Pause view";
}
function SetStatMode()
{
if(!StatMode)
StatMode=0;
StatMode=(StatMode+1)%3;
GetData("SetStatMode",StatMode,function (Data)
{
});
}
function ClearStat()
{
GetData("ClearStat",{},function (Data)
{
ClearTableStat(TabbleStat);
ClearTableStat(TableError);
});
}
function SetStatInfo(Data)
{
var item = document.getElementById("idStatInfo");
var button = document.getElementById("idStatButton");
StatMode=Data.STAT_MODE;
if(StatMode===1)
{
item.innerText=" =Stat ON=";
button.value="Start detail stat"
}
else
if(StatMode===2)
{
item.innerText=" =Stat detail ON=";
button.value="Stop stat"
}
else
{
item.innerText=" =Stat OFF=";
button.value="Start stat"
}
}
//LIB
function GetStat()
{
if(bPause)
return;
GetData("GetAllCounters",{},function (Data)
{
SetResult(Data);
SetStatInfo(Data);
});
}
function OnSetFilter()
{
SetResult();
}
window.onload=function()
{
TabbleStat=document.getElementById("grid_stat");
TableError=document.getElementById("grid_error");
SetPause(0);
GetStat();
setInterval(GetStat,1000);
window.onkeydown = function (e)
{
if(e.keyCode===27)
{
window.close();
}
};
//document.body.className="univers "+localStorage["idSelStyle"];
}
</script>
<style type="text/css">
table
{
border-collapse: collapse;
}
.stat th, .stat td
{
border: 1px solid #000;
padding: 5px;
}
.stat td
{
width: 122px;
text-align: right;
}
.stat td:nth-child(1)
{
width: 220px;
}
.stat td:nth-child(5)
{
width: 50px;
}
.total
{
text-align: right;
font-weight: 600;
}
#topframeFind
{
z-index:1000;
position:fixed;
top:80px;
left:10px;
text-align: left;
width:1200px;
opacity: .7;
color: blue;
}
#topframe
{
z-index:1000;
position:absolute;
top:0px;
left:0px;
text-align: center;
width:600px;
}
#idRun, #idStatButton
{
width:100px;
}
</style>
<BR>
<div id="confirm_div" style="height: 0px;"></div>
<h2 align='center' >Performance counters</h2>
<DIV id="topframeFind">
Filter: <INPUT type="search" style="width: 292px" id="idFilter" autofocus onkeyup="OnSetFilter()" value="">
</DIV>
<BR>
<table id="grid_stat" class="stat">
<tr>
<th>Counters</th>
<th>10 sec</th>
<th>10 min</th>
<th>total</th>
<th>Diagr</th>
</tr>
<tr class="total">
<td>Total</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<BR>
<table id="grid_error" class="stat">
<tr>
<th>Errors</th>
<th>10 sec</th>
<th>10 min</th>
<th>total</th>
<th>Diagr</th>
</tr>
<tr class="total">
<td>Total</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
<DIV id="topframe">
<INPUT type="button" style="float:left" onclick="SetPause()" id="idRun">
<INPUT type="button" style="float:left" onclick="ClearStat()" id="idClearStat" value="Clear stat">
<INPUT type="button" style="float:left" onclick="SetStatMode()" id="idStatButton">
<DIV align='left'><B id="idStatInfo"></B></DIV>
</DIV>
</body>
</html>

BIN
Source/HTML/tera.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

1845
Source/HTML/wallet.html Normal file

File diff suppressed because it is too large Load Diff

1112
Source/HTML/web-wallet.html Normal file

File diff suppressed because it is too large Load Diff

6
Source/SITE/CSS/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

4
Source/SITE/CSS/font-awesome.min.css vendored Normal file

File diff suppressed because one or more lines are too long

839
Source/SITE/CSS/style.min.css vendored Normal file
View File

@ -0,0 +1,839 @@
body, h1, h2, h3, h4, h5, h6
{
font-family: Roboto, sans-serif
}
a, a:focus, a:hover {
text-decoration: none
}
body {
font-size: 14px;
line-height: 1.6;
overflow-x: hidden;
color: #868F9B
}
h1, h2, h3, h4, h5, h6 {
font-weight: 700;
margin-top: 0;
margin-bottom: 20px;
color: #10161A
}
.main-color, a {
color: #6195FF
}
h1 {
font-size: 54px
}
h2 {
font-size: 36px
}
h3 {
font-size: 21px
}
h4 {
font-size: 18px
}
h5 {
font-size: 16px
}
a {
-webkit-transition: .2s opacity;
transition: .2s opacity
}
a:focus, a:hover {
outline: 0;
opacity: .8;
color: #6195FF
}
.white-text {
color: #FFF
}
::-moz-selection {
background-color: #6195FF;
color: #FFF
}
::selection {
background-color: #6195FF;
color: #FFF
}
ol, ul {
margin: 0;
padding: 0;
list-style: none
}
.section {
position: relative
}
.bg-img, .bg-img .overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0
}
.md-padding, .sm-padding {
padding-top: 60px;
padding-bottom: 60px
}
.bg-grey {
background-color: #FAFAFA;
border-top: 1px solid #EEE;
border-bottom: 1px solid #EEE
}
.bg-dark {
background-color: #1C1D21
}
.bg-img {
z-index: -1;
background-position: center;
background-size: cover;
background-attachment: fixed
}
.section-header {
position: relative
}
.section-header .title {
text-transform: capitalize;
display: inline-block;
position: relative;
line-height: 60px;
font-weight: 400
}
.title::before {
content: "";
position: absolute;
width: 50%;
border-top: 2px solid #000;
top: 0;
left: 0
}
input[type=text], input[type=email], input[type=password], input[type=number], input[type=date], input[type=url], input[type=tel], textarea {
height: 40px;
width: 100%;
border: none;
background: #F4F4F4;
border-bottom: 2px solid #EEE;
color: #354052;
padding: 0 10px;
opacity: .5;
-webkit-transition: .2s border-color, .2s opacity;
transition: .2s border-color, .2s opacity
}
textarea {
padding: 10px;
min-height: 80px;
resize: vertical
}
input[type=text]:focus, input[type=email]:focus, input[type=password]:focus, input[type=number]:focus, input[type=date]:focus, input[type=url]:focus, input[type=tel]:focus, textarea:focus {
border-color: #6195FF;
opacity: 1
}
.main-btn, .outline-btn, .white-btn {
display: inline-block;
padding: 10px 35px;
margin: 3px;
border: 2px solid transparent;
border-radius: 3px;
-webkit-transition: .2s opacity;
transition: .2s opacity
}
.main-btn {
background: #6195FF;
color: #FFF
}
.white-btn {
background: #FFF;
color: #10161A!important
}
.outline-btn {
background: 0 0;
color: #6195FF!important;
border-color: #6195FF
}
.main-btn:hover, .outline-btn:hover, .white-btn:hover {
opacity: .8
}
.navbar-brand {
padding: 0
}
.navbar-brand .logo, .navbar-brand .logo-alt {
max-height: 50px;
display: block
}
#nav.fixed-nav .navbar-brand .logo-alt, #nav.nav-transparent:not(.fixed-nav) .navbar-brand .logo, #nav:not(.nav-transparent):not(.fixed-nav) .navbar-brand .logo-alt {
display: none
}
@media only screen and (max-width:767px) {
#nav.nav-transparent .navbar-brand .logo-alt {
display: none!important
}
#nav.nav-transparent .navbar-brand .logo {
display: block!important;
margin-top: 8px
}
}
#nav {
padding: 10px 0;
background: #FFF;
-webkit-transition: .2s padding;
transition: .2s padding;
z-index: 999
}
#nav.navbar {
border: none;
border-radius: 0;
margin-bottom: 0
}
#nav.fixed-nav {
left: 0;
right: 0;
padding: 0
}
#nav.nav-transparent {
background: 0 0
}
@media only screen and (min-width:768px)
{
.main-nav li {
padding: 0 15px
}
.main-nav li a {
font-size: 14px;
-webkit-transition: .2s color;
transition: .2s color
}
.main-nav>li>a {
color: #10161A;
padding: 15px 0
}
#nav.nav-transparent:not(.fixed-nav) .main-nav>li>a {
color: #000
}
.main-nav>li.active>a, .main-nav>li>a:focus, .main-nav>li>a:hover {
background: 0 0
}
.main-nav>li>a:after {
content: "";
display: block;
background-color: #000;
height: 2px;
width: 0%;
-webkit-transition: .2s width;
transition: .2s width
}
.main-nav>li.active>a:after, .main-nav>li>a:hover:after {
width: 70%
}
.has-dropdown {
position: relative
}
.has-dropdown>a:before {
font-family: FontAwesome;
content: "\f054";
font-size: 6px;
margin-left: 6px;
float: right;
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transition: .2s transform;
transition: .2s transform
}
.main-nav>.has-dropdown>.dropdown2
{
top: 100%;
right: 50%
}
.main-nav>.has-dropdown>.dropdown2 .dropdown2.dropdown-left
{
right: 150%
}
.dropdown2 li a
{
display: block;
color: #000;
border-top: 1px solid rgba(250, 250, 250, .1);
padding: 10px 0
}
.dropdown2 li:nth-child(1) a
{
border-top: none
}
.has-dropdown:hover>.dropdown2
{
opacity: 1;
visibility: visible;
-webkit-transform: translateY(0) translateX(50%);
-ms-transform: translateY(0) translateX(50%);
transform: translateY(0) translateX(50%)
}
.has-dropdown:hover>a:before {
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
transform: rotate(0)
}
.nav-collapse {
display: none
}
}
@media only screen and (max-width:767px) {
#nav.fixed-nav, .main-nav {
position: fixed
}
#nav {
padding: 0
}
#nav.nav-transparent {
background: #FFF
}
.main-nav {
right: 0;
height: calc(100vh - 80px);
-webkit-box-shadow: 0 80px 0 0 #1C1D21;
box-shadow: 0 80px 0 0 #1C1D21;
max-width: 250px;
width: 0%;
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
margin: 0;
overflow-y: auto;
background: #1C1D21;
-webkit-transition: .2s all;
transition: .2s all
}
#nav.open .main-nav {
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
width: 100%
}
.main-nav li {
border-top: 1px solid rgba(250, 250, 250, .1)
}
.main-nav li a {
display: block;
color: #FFF;
-webkit-transition: .2s all;
transition: .2s all
}
.main-nav>li.active {
border-left: 6px solid #999
}
.main-nav li a:focus, .main-nav li a:hover {
background-color: #999ba0;
color: #FFF;
opacity: 1
}
.has-dropdown>a:after {
content: "\f054";
font-family: FontAwesome;
float: right;
-webkit-transition: .2s -webkit-transform;
transition: .2s -webkit-transform;
transition: .2s transform;
transition: .2s transform, .2s -webkit-transform
}
/*.dropdown2 {*/
/*opacity: 0;*/
/*visibility: hidden;*/
/*height: 0;*/
/*background: rgba(250, 250, 250, .1)*/
/*}*/
.dropdown2 li a
{
padding: 6px 10px
}
.has-dropdown.open-drop>a:after
{
background: rgba(150, 0, 0, .5)
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg)
}
.has-dropdown.open-drop>.dropdown2 {
opacity: 1;
visibility: visible;
height: auto;
-webkit-transition: .2s all;
transition: .2s all
}
}
.nav-collapse {
position: relative;
float: right;
width: 40px;
height: 40px;
margin-top: 5px;
margin-right: 5px;
cursor: pointer;
z-index: 99999
}
.nav-collapse span {
display: block;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
position: absolute;
top: 50%;
left: 50%;
width: 25px
}
.nav-collapse span:after, .nav-collapse span:before {
content: "";
display: block
}
.nav-collapse span, .nav-collapse span:after, .nav-collapse span:before {
height: 4px;
background: #10161A;
-webkit-transition: .2s all;
transition: .2s all
}
.nav-collapse span:before {
-webkit-transform: translate(0, 10px);
-ms-transform: translate(0, 10px);
transform: translate(0, 10px)
}
.nav-collapse span:after {
-webkit-transform: translate(0, -14px);
-ms-transform: translate(0, -14px);
transform: translate(0, -14px)
}
#nav.open .nav-collapse span {
background: 0 0
}
#nav.open .nav-collapse span:before {
-webkit-transform: translateY(0) rotate(-135deg);
-ms-transform: translateY(0) rotate(-135deg);
transform: translateY(0) rotate(-135deg)
}
#nav.open .nav-collapse span:after {
-webkit-transform: translateY(-4px) rotate(135deg);
-ms-transform: translateY(-4px) rotate(135deg);
transform: translateY(-4px) rotate(135deg)
}
header {
position: relative
}
#home {
height: 100vh
}
#home .home-wrapper {
position: absolute;
left: 0;
right: 0;
bottom: 0;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
text-align: center
}
.home-content h1 {
text-transform: uppercase
}
.home-content button {
margin-top: 20px
}
.header-wrapper h2 {
display: inline-block;
margin-bottom: 0
}
.header-wrapper .breadcrumb {
float: right;
background: 0 0;
margin-bottom: 0
}
.breadcrumb>li+li:before, .header-wrapper .breadcrumb .breadcrumb-item.active {
color: #868F9B
}
.about {
position: relative;
text-align: center;
padding: 20px;
border: 1px solid #EEE;
margin: 15px 0
}
.about i {
font-size: 36px;
color: #6195FF;
margin-bottom: 20px
}
.about:hover:after {
width: 100%
}
.about h3 {
-webkit-transition: .2s color;
transition: .2s color
}
@media only screen and (min-width:767px) {
.no-more-tables tr th:nth-child(1) {
width: 14%
}
.no-more-tables tr th:nth-child(2) {
width: 13%
}
.no-more-tables tr th:nth-child(3), .no-more-tables tr th:nth-child(4) {
width: 26%
}
.no-more-tables tr th:nth-child(5) {
width: 21%
}
}
.no-more-tables td, .no-more-tables th {
background: #fff
}
.flex.row.wrap {
padding-left: 16px;
padding-right: 16px
}
.flex.col-md-3 {
padding-right: 0;
padding-left: 0
}
.roadmap-item__line {
height: 4px;
background-image: linear-gradient(270deg, rgba(0, 0, 0, .25), hsla(0, 0%, 100%, .65));
position: relative;
margin-top: 2rem;
margin-bottom: 2rem
}
.roadmap-item__line .dot, .roadmap-item__line.done::before {
position: absolute;
left: 0;
content: ""
}
.roadmap-item__line.done::before {
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .5)
}
.roadmap-item__line .dot {
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
width: 20px;
height: 20px;
background-color: #fff;
border-radius: 50%;
border: 4px solid rgba(0, 0, 0, .5)
}
.roadmap-item__line.done .dot {
border: 6px solid rgba(0, 0, 0, .5)
}
.roadmap-item__line.processing .dot {
border: 4px solid rgba(0, 0, 0, .5)
}
.roadmap-item__date {
font-size: 16px;
margin-bottom: .5rem;
color: rgba(0, 0, 0, .85)
}
.roadmap-item__info ul {
list-style-type: disc;
list-style-position: inside
}
.feature {
margin: 15px 0
}
.feature i {
float: left;
padding: 5px;
border-radius: 50%;
color: #6195FF;
border: 1px solid #6195FF;
margin-right: 5px
}
#footer {
position: relative
}
.footer-logo {
text-align: center;
margin-bottom: 40px
}
.footer-logo>a>img {
max-height: 80px
}
.footer-follow {
text-align: center;
margin-bottom: 20px
}
.footer-follow li {
display: inline-block;
margin-right: 10px;
margin-bottom: 13px
}
.footer-follow li a {
display: inline-block;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
border-radius: 100%;
background-color: #667586;
color: #FFF
}
.footer-link {
display: flex;
justify-content: center;
margin-bottom: 24px
}
.footer-link-item:not(:last-child) {
margin-right: 32px
}
.footer-link-item a {
color: rgba(255, 255, 255, .65)
}
.footer-link-item a:hover {
color: rgba(255, 255, 255, 1)
}
@media only screen and (min-width:1200px) {
.about {
min-height: 291px
}
}
@media only screen and (min-width:992px) {
.about {
min-height: 324px
}
}
@media only screen and (max-width:991px) {
.no-more-tables table, .no-more-tables td {
border: none!important
}
.roadmap-item, .title.md-down-left {
margin-left: 16px
}
.no-more-tables table, .no-more-tables tbody, .no-more-tables td, .no-more-tables th, .no-more-tables thead, .no-more-tables tr {
display: block
}
.no-more-tables thead tr {
position: absolute;
top: -9999px;
left: -9999px
}
.no-more-tables td {
border-bottom: 1px solid #eee!important;
position: relative;
padding-left: 50%!important;
white-space: normal;
text-align: left
}
.no-more-tables td:before {
position: absolute;
top: 6px;
left: 6px;
width: 45%;
padding-right: 10px;
white-space: nowrap;
text-align: left;
font-weight: 700;
content: attr(data-title)
}
.roadmap-item {
display: flex;
height: 100%;
min-height: 108px
}
.roadmap-item__line {
width: 4px;
height: 100%;
min-height: 108px;
margin: 0 18px 0 10px;
background-image: linear-gradient(hsla(0, 0%, 100%, .65), rgba(0, 0, 0, .25))
}
.roadmap-item__line.done:before, .roadmap-item__line.processing:before {
top: 10px;
left: 0
}
.roadmap-item__line.processing:before {
width: 100%;
height: 6%
}
.roadmap-item__body {
width: 100%;
padding-bottom: 16px
}
.roadmap-item__line .dot {
top: 0;
left: 50%;
transform: translate(-50%, 0)
}
}
@media only screen and (max-width:767px) {
.section-header h2.title {
font-size: 31.5px
}
.default-btn, .main-btn, .outline-btn, .white-btn {
padding: 8px 22px;
font-size: 14px
}
.home-content h1 {
font-size: 36px
}
.header-wrapper h2 {
margin-bottom: 20px;
text-align: center;
display: block
}
.header-wrapper .breadcrumb {
float: none;
text-align: center
}
}
@media only screen and (max-width:480px) {
#numbers [class*=col-xs], #portfolio [class*=col-xs], .contact-form .input:nth-child(1), .contact-form .input:nth-child(2), .reply-form form .input {
width: 100%
}
.contact-form .input:nth-child(2), .reply-form form .input:nth-child(2) {
margin-left: 0
}
.blog-author .media .media-left {
display: block;
padding-right: 0;
margin-bottom: 20px
}
.blog-author .media {
text-align: center
}
.blog-author .media .media-heading .author-social {
margin-top: 10px;
float: none
}
.blog-author .media .media-left img {
margin: auto
}
.blog-comments .media .media {
margin: 0 -15px
}
}
.owl-theme .owl-dots .owl-dot span {
border: none;
background: #EEE;
-webkit-transition: .2s all;
transition: .2s all
}
.owl-theme .owl-dots .owl-dot:hover span {
background: #6195FF
}
.owl-theme .owl-dots .owl-dot.active span {
background: #6195FF;
width: 20px
}
#back-to-top, .owl-theme .owl-nav [class*=owl-] {
width: 50px;
height: 50px;
line-height: 50px;
background: #6195FF;
border-radius: 3px;
color: #FFF
}
.owl-theme .owl-nav {
opacity: 0;
-webkit-transition: .2s opacity;
transition: .2s opacity
}
.owl-theme:hover .owl-nav {
opacity: 1
}
.owl-theme .owl-nav [class*=owl-] {
position: absolute;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
padding: 0;
margin: 0
}
.owl-theme .owl-prev {
left: 0
}
.owl-theme .owl-next {
right: 0
}
.owl-theme .owl-nav [class*=owl-]:hover {
opacity: .8;
background: #6195FF
}
#back-to-top {
display: none;
position: fixed;
bottom: 20px;
right: 20px;
text-align: center;
z-index: 9999;
-webkit-transition: .2s opacity;
transition: .2s opacity;
cursor: pointer
}
#back-to-top:after {
content: "\f341";
font-family: FontAwesome
}
#back-to-top:hover {
opacity: .8
}
#preloader {
position: fixed;
left: 0;
top: 0;
bottom: 0;
right: 0;
background-color: #FFF;
z-index: 99999
}
.preloader {
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%)
}
.preloader span {
display: inline-block;
background-color: #667586;
width: 25px;
height: 25px;
-webkit-animation: 1s preload ease-in-out infinite;
animation: preload 1s ease-in-out infinite;
-webkit-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0);
border-radius: 50%
}
.preloader span:nth-child(1) {
-webkit-animation-delay: 0s;
animation-delay: 0s
}
.preloader span:nth-child(2) {
-webkit-animation-delay: .1s;
animation-delay: .1s
}
.preloader span:nth-child(3) {
-webkit-animation-delay: .15s;
animation-delay: .15s
}
.preloader span:nth-child(4) {
-webkit-animation-delay: .2s;
animation-delay: .2s
}
@-webkit-keyframes preload {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0)
}
50% {
-webkit-transform: scale(1);
transform: scale(1)
}
}
@keyframes preload {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0)
}
50% {
-webkit-transform: scale(1);
transform: scale(1)
}
}

File diff suppressed because one or more lines are too long

1
Source/SITE/JS/_run.bat Normal file
View File

@ -0,0 +1 @@
browserify test.js > sign-lib.js

947
Source/SITE/JS/bootstrap.min.js vendored Normal file
View File

@ -0,0 +1,947 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under the MIT license
*/
if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery"); + function(a) {
"use strict";
var b = a.fn.jquery.split(" ")[0].split(".");
if (b[0] < 2 && b[1] < 9 || 1 == b[0] && 9 == b[1] && b[2] < 1 || b[0] > 3) throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")
}(jQuery), + function(a) {
"use strict";
function b() {
var a = document.createElement("bootstrap"),
b = {
WebkitTransition: "webkitTransitionEnd",
MozTransition: "transitionend",
OTransition: "oTransitionEnd otransitionend",
transition: "transitionend"
};
for (var c in b)
if (void 0 !== a.style[c]) return {
end: b[c]
};
return !1
}
a.fn.emulateTransitionEnd = function(b) {
var c = !1,
d = this;
a(this).one("bsTransitionEnd", function() {
c = !0
});
var e = function() {
c || a(d).trigger(a.support.transition.end)
};
return setTimeout(e, b), this
}, a(function() {
a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = {
bindType: a.support.transition.end,
delegateType: a.support.transition.end,
handle: function(b) {
if (a(b.target).is(this)) return b.handleObj.handler.apply(this, arguments)
}
})
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var c = a(this),
e = c.data("bs.alert");
e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c)
})
}
var c = '[data-dismiss="alert"]',
d = function(b) {
a(b).on("click", c, this.close)
};
d.VERSION = "3.3.7", d.TRANSITION_DURATION = 150, d.prototype.close = function(b) {
function c() {
g.detach().trigger("closed.bs.alert").remove()
}
var e = a(this),
f = e.attr("data-target");
f || (f = e.attr("href"), f = f && f.replace(/.*(?=#[^\s]*$)/, ""));
var g = a("#" === f ? [] : f);
b && b.preventDefault(), g.length || (g = e.closest(".alert")), g.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (g.removeClass("in"), a.support.transition && g.hasClass("fade") ? g.one("bsTransitionEnd", c).emulateTransitionEnd(d.TRANSITION_DURATION) : c())
};
var e = a.fn.alert;
a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function() {
return a.fn.alert = e, this
}, a(document).on("click.bs.alert.data-api", c, d.prototype.close)
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.button"),
f = "object" == typeof b && b;
e || d.data("bs.button", e = new c(this, f)), "toggle" == b ? e.toggle() : b && e.setState(b)
})
}
var c = function(b, d) {
this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1
};
c.VERSION = "3.3.7", c.DEFAULTS = {
loadingText: "loading..."
}, c.prototype.setState = function(b) {
var c = "disabled",
d = this.$element,
e = d.is("input") ? "val" : "html",
f = d.data();
b += "Text", null == f.resetText && d.data("resetText", d[e]()), setTimeout(a.proxy(function() {
d[e](null == f[b] ? this.options[b] : f[b]), "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c).prop(c, !0)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c).prop(c, !1))
}, this), 0)
}, c.prototype.toggle = function() {
var a = !0,
b = this.$element.closest('[data-toggle="buttons"]');
if (b.length) {
var c = this.$element.find("input");
"radio" == c.prop("type") ? (c.prop("checked") && (a = !1), b.find(".active").removeClass("active"), this.$element.addClass("active")) : "checkbox" == c.prop("type") && (c.prop("checked") !== this.$element.hasClass("active") && (a = !1), this.$element.toggleClass("active")), c.prop("checked", this.$element.hasClass("active")), a && c.trigger("change")
} else this.$element.attr("aria-pressed", !this.$element.hasClass("active")), this.$element.toggleClass("active")
};
var d = a.fn.button;
a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function() {
return a.fn.button = d, this
}, a(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(c) {
var d = a(c.target).closest(".btn");
b.call(d, "toggle"), a(c.target).is('input[type="radio"], input[type="checkbox"]') || (c.preventDefault(), d.is("input,button") ? d.trigger("focus") : d.find("input:visible,button:visible").first().trigger("focus"))
}).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function(b) {
a(b.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(b.type))
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.carousel"),
f = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b),
g = "string" == typeof b ? b : f.slide;
e || d.data("bs.carousel", e = new c(this, f)), "number" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle()
})
}
var c = function(b, c) {
this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", a.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", a.proxy(this.pause, this)).on("mouseleave.bs.carousel", a.proxy(this.cycle, this))
};
c.VERSION = "3.3.7", c.TRANSITION_DURATION = 600, c.DEFAULTS = {
interval: 5e3,
pause: "hover",
wrap: !0,
keyboard: !0
}, c.prototype.keydown = function(a) {
if (!/input|textarea/i.test(a.target.tagName)) {
switch (a.which) {
case 37:
this.prev();
break;
case 39:
this.next();
break;
default:
return
}
a.preventDefault()
}
}, c.prototype.cycle = function(b) {
return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this
}, c.prototype.getItemIndex = function(a) {
return this.$items = a.parent().children(".item"), this.$items.index(a || this.$active)
}, c.prototype.getItemForDirection = function(a, b) {
var c = this.getItemIndex(b),
d = "prev" == a && 0 === c || "next" == a && c == this.$items.length - 1;
if (d && !this.options.wrap) return b;
var e = "prev" == a ? -1 : 1,
f = (c + e) % this.$items.length;
return this.$items.eq(f)
}, c.prototype.to = function(a) {
var b = this,
c = this.getItemIndex(this.$active = this.$element.find(".item.active"));
if (!(a > this.$items.length - 1 || a < 0)) return this.sliding ? this.$element.one("slid.bs.carousel", function() {
b.to(a)
}) : c == a ? this.pause().cycle() : this.slide(a > c ? "next" : "prev", this.$items.eq(a))
}, c.prototype.pause = function(b) {
return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
}, c.prototype.next = function() {
if (!this.sliding) return this.slide("next")
}, c.prototype.prev = function() {
if (!this.sliding) return this.slide("prev")
}, c.prototype.slide = function(b, d) {
var e = this.$element.find(".item.active"),
f = d || this.getItemForDirection(b, e),
g = this.interval,
h = "next" == b ? "left" : "right",
i = this;
if (f.hasClass("active")) return this.sliding = !1;
var j = f[0],
k = a.Event("slide.bs.carousel", {
relatedTarget: j,
direction: h
});
if (this.$element.trigger(k), !k.isDefaultPrevented()) {
if (this.sliding = !0, g && this.pause(), this.$indicators.length) {
this.$indicators.find(".active").removeClass("active");
var l = a(this.$indicators.children()[this.getItemIndex(f)]);
l && l.addClass("active")
}
var m = a.Event("slid.bs.carousel", {
relatedTarget: j,
direction: h
});
return a.support.transition && this.$element.hasClass("slide") ? (f.addClass(b), f[0].offsetWidth, e.addClass(h), f.addClass(h), e.one("bsTransitionEnd", function() {
f.removeClass([b, h].join(" ")).addClass("active"), e.removeClass(["active", h].join(" ")), i.sliding = !1, setTimeout(function() {
i.$element.trigger(m)
}, 0)
}).emulateTransitionEnd(c.TRANSITION_DURATION)) : (e.removeClass("active"), f.addClass("active"), this.sliding = !1, this.$element.trigger(m)), g && this.cycle(), this
}
};
var d = a.fn.carousel;
a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function() {
return a.fn.carousel = d, this
};
var e = function(c) {
var d, e = a(this),
f = a(e.attr("data-target") || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, ""));
if (f.hasClass("carousel")) {
var g = a.extend({}, f.data(), e.data()),
h = e.attr("data-slide-to");
h && (g.interval = !1), b.call(f, g), h && f.data("bs.carousel").to(h), c.preventDefault()
}
};
a(document).on("click.bs.carousel.data-api", "[data-slide]", e).on("click.bs.carousel.data-api", "[data-slide-to]", e), a(window).on("load", function() {
a('[data-ride="carousel"]').each(function() {
var c = a(this);
b.call(c, c.data())
})
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
var c, d = b.attr("data-target") || (c = b.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "");
return a(d)
}
function c(b) {
return this.each(function() {
var c = a(this),
e = c.data("bs.collapse"),
f = a.extend({}, d.DEFAULTS, c.data(), "object" == typeof b && b);
!e && f.toggle && /show|hide/.test(b) && (f.toggle = !1), e || c.data("bs.collapse", e = new d(this, f)), "string" == typeof b && e[b]()
})
}
var d = function(b, c) {
this.$element = a(b), this.options = a.extend({}, d.DEFAULTS, c), this.$trigger = a('[data-toggle="collapse"][href="#' + b.id + '"],[data-toggle="collapse"][data-target="#' + b.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle()
};
d.VERSION = "3.3.7", d.TRANSITION_DURATION = 350, d.DEFAULTS = {
toggle: !0
}, d.prototype.dimension = function() {
var a = this.$element.hasClass("width");
return a ? "width" : "height"
}, d.prototype.show = function() {
if (!this.transitioning && !this.$element.hasClass("in")) {
var b, e = this.$parent && this.$parent.children(".panel").children(".in, .collapsing");
if (!(e && e.length && (b = e.data("bs.collapse"), b && b.transitioning))) {
var f = a.Event("show.bs.collapse");
if (this.$element.trigger(f), !f.isDefaultPrevented()) {
e && e.length && (c.call(e, "hide"), b || e.data("bs.collapse", null));
var g = this.dimension();
this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
var h = function() {
this.$element.removeClass("collapsing").addClass("collapse in")[g](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
};
if (!a.support.transition) return h.call(this);
var i = a.camelCase(["scroll", g].join("-"));
this.$element.one("bsTransitionEnd", a.proxy(h, this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])
}
}
}
}, d.prototype.hide = function() {
if (!this.transitioning && this.$element.hasClass("in")) {
var b = a.Event("hide.bs.collapse");
if (this.$element.trigger(b), !b.isDefaultPrevented()) {
var c = this.dimension();
this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1;
var e = function() {
this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
};
return a.support.transition ? void this.$element[c](0).one("bsTransitionEnd", a.proxy(e, this)).emulateTransitionEnd(d.TRANSITION_DURATION) : e.call(this)
}
}
}, d.prototype.toggle = function() {
this[this.$element.hasClass("in") ? "hide" : "show"]()
}, d.prototype.getParent = function() {
return a(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(a.proxy(function(c, d) {
var e = a(d);
this.addAriaAndCollapsedClass(b(e), e)
}, this)).end()
}, d.prototype.addAriaAndCollapsedClass = function(a, b) {
var c = a.hasClass("in");
a.attr("aria-expanded", c), b.toggleClass("collapsed", !c).attr("aria-expanded", c)
};
var e = a.fn.collapse;
a.fn.collapse = c, a.fn.collapse.Constructor = d, a.fn.collapse.noConflict = function() {
return a.fn.collapse = e, this
}, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function(d) {
var e = a(this);
e.attr("data-target") || d.preventDefault();
var f = b(e),
g = f.data("bs.collapse"),
h = g ? "toggle" : e.data();
c.call(f, h)
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
var c = b.attr("data-target");
c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
var d = c && a(c);
return d && d.length ? d : b.parent()
}
function c(c) {
c && 3 === c.which || (a(e).remove(), a(f).each(function() {
var d = a(this),
e = b(d),
f = {
relatedTarget: this
};
e.hasClass("open") && (c && "click" == c.type && /input|textarea/i.test(c.target.tagName) && a.contains(e[0], c.target) || (e.trigger(c = a.Event("hide.bs.dropdown", f)), c.isDefaultPrevented() || (d.attr("aria-expanded", "false"), e.removeClass("open").trigger(a.Event("hidden.bs.dropdown", f)))))
}))
}
function d(b) {
return this.each(function() {
var c = a(this),
d = c.data("bs.dropdown");
d || c.data("bs.dropdown", d = new g(this)), "string" == typeof b && d[b].call(c)
})
}
var e = ".dropdown-backdrop",
f = '[data-toggle="dropdown"]',
g = function(b) {
a(b).on("click.bs.dropdown", this.toggle)
};
g.VERSION = "3.3.7", g.prototype.toggle = function(d) {
var e = a(this);
if (!e.is(".disabled, :disabled")) {
var f = b(e),
g = f.hasClass("open");
if (c(), !g) {
"ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click", c);
var h = {
relatedTarget: this
};
if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented()) return;
e.trigger("focus").attr("aria-expanded", "true"), f.toggleClass("open").trigger(a.Event("shown.bs.dropdown", h))
}
return !1
}
}, g.prototype.keydown = function(c) {
if (/(38|40|27|32)/.test(c.which) && !/input|textarea/i.test(c.target.tagName)) {
var d = a(this);
if (c.preventDefault(), c.stopPropagation(), !d.is(".disabled, :disabled")) {
var e = b(d),
g = e.hasClass("open");
if (!g && 27 != c.which || g && 27 == c.which) return 27 == c.which && e.find(f).trigger("focus"), d.trigger("click");
var h = " li:not(.disabled):visible a",
i = e.find(".dropdown-menu" + h);
if (i.length) {
var j = i.index(c.target);
38 == c.which && j > 0 && j--, 40 == c.which && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus")
}
}
}
};
var h = a.fn.dropdown;
a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function() {
return a.fn.dropdown = h, this
}, a(document).on("click.bs.dropdown.data-api", c).on("click.bs.dropdown.data-api", ".dropdown form", function(a) {
a.stopPropagation()
}).on("click.bs.dropdown.data-api", f, g.prototype.toggle).on("keydown.bs.dropdown.data-api", f, g.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", g.prototype.keydown)
}(jQuery), + function(a) {
"use strict";
function b(b, d) {
return this.each(function() {
var e = a(this),
f = e.data("bs.modal"),
g = a.extend({}, c.DEFAULTS, e.data(), "object" == typeof b && b);
f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d)
})
}
var c = function(b, c) {
this.options = c, this.$body = a(document.body), this.$element = a(b), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function() {
this.$element.trigger("loaded.bs.modal")
}, this))
};
c.VERSION = "3.3.7", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = {
backdrop: !0,
keyboard: !0,
show: !0
}, c.prototype.toggle = function(a) {
return this.isShown ? this.hide() : this.show(a)
}, c.prototype.show = function(b) {
var d = this,
e = a.Event("show.bs.modal", {
relatedTarget: b
});
this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function() {
d.$element.one("mouseup.dismiss.bs.modal", function(b) {
a(b.target).is(d.$element) && (d.ignoreBackdropClick = !0)
})
}), this.backdrop(function() {
var e = a.support.transition && d.$element.hasClass("fade");
d.$element.parent().length || d.$element.appendTo(d.$body), d.$element.show().scrollTop(0), d.adjustDialog(), e && d.$element[0].offsetWidth, d.$element.addClass("in"), d.enforceFocus();
var f = a.Event("shown.bs.modal", {
relatedTarget: b
});
e ? d.$dialog.one("bsTransitionEnd", function() {
d.$element.trigger("focus").trigger(f)
}).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger("focus").trigger(f)
}))
}, c.prototype.hide = function(b) {
b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"), this.$dialog.off("mousedown.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", a.proxy(this.hideModal, this)).emulateTransitionEnd(c.TRANSITION_DURATION) : this.hideModal())
}, c.prototype.enforceFocus = function() {
a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function(a) {
document === a.target || this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus")
}, this))
}, c.prototype.escape = function() {
this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", a.proxy(function(a) {
27 == a.which && this.hide()
}, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
}, c.prototype.resize = function() {
this.isShown ? a(window).on("resize.bs.modal", a.proxy(this.handleUpdate, this)) : a(window).off("resize.bs.modal")
}, c.prototype.hideModal = function() {
var a = this;
this.$element.hide(), this.backdrop(function() {
a.$body.removeClass("modal-open"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger("hidden.bs.modal")
})
}, c.prototype.removeBackdrop = function() {
this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
}, c.prototype.backdrop = function(b) {
var d = this,
e = this.$element.hasClass("fade") ? "fade" : "";
if (this.isShown && this.options.backdrop) {
var f = a.support.transition && e;
if (this.$backdrop = a(document.createElement("div")).addClass("modal-backdrop " + e).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", a.proxy(function(a) {
return this.ignoreBackdropClick ? void(this.ignoreBackdropClick = !1) : void(a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide()))
}, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
f ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass("in");
var g = function() {
d.removeBackdrop(), b && b()
};
a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g()
} else b && b()
}, c.prototype.handleUpdate = function() {
this.adjustDialog()
}, c.prototype.adjustDialog = function() {
var a = this.$element[0].scrollHeight > document.documentElement.clientHeight;
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && a ? this.scrollbarWidth : "",
paddingRight: this.bodyIsOverflowing && !a ? this.scrollbarWidth : ""
})
}, c.prototype.resetAdjustments = function() {
this.$element.css({
paddingLeft: "",
paddingRight: ""
})
}, c.prototype.checkScrollbar = function() {
var a = window.innerWidth;
if (!a) {
var b = document.documentElement.getBoundingClientRect();
a = b.right - Math.abs(b.left)
}
this.bodyIsOverflowing = document.body.clientWidth < a, this.scrollbarWidth = this.measureScrollbar()
}, c.prototype.setScrollbar = function() {
var a = parseInt(this.$body.css("padding-right") || 0, 10);
this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", a + this.scrollbarWidth)
}, c.prototype.resetScrollbar = function() {
this.$body.css("padding-right", this.originalBodyPad)
}, c.prototype.measureScrollbar = function() {
var a = document.createElement("div");
a.className = "modal-scrollbar-measure", this.$body.append(a);
var b = a.offsetWidth - a.clientWidth;
return this.$body[0].removeChild(a), b
};
var d = a.fn.modal;
a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function() {
return a.fn.modal = d, this
}, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(c) {
var d = a(this),
e = d.attr("href"),
f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")),
g = f.data("bs.modal") ? "toggle" : a.extend({
remote: !/#/.test(e) && e
}, f.data(), d.data());
d.is("a") && c.preventDefault(), f.one("show.bs.modal", function(a) {
a.isDefaultPrevented() || f.one("hidden.bs.modal", function() {
d.is(":visible") && d.trigger("focus")
})
}), b.call(f, g, this)
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.tooltip"),
f = "object" == typeof b && b;
!e && /destroy|hide/.test(b) || (e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]())
})
}
var c = function(a, b) {
this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", a, b)
};
c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.DEFAULTS = {
animation: !0,
placement: "top",
selector: !1,
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
trigger: "hover focus",
title: "",
delay: 0,
html: !1,
container: !1,
viewport: {
selector: "body",
padding: 0
}
}, c.prototype.init = function(b, c, d) {
if (this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d), this.$viewport = this.options.viewport && a(a.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = {
click: !1,
hover: !1,
focus: !1
}, this.$element[0] instanceof document.constructor && !this.options.selector) throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!");
for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
var g = e[f];
if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));
else if ("manual" != g) {
var h = "hover" == g ? "mouseenter" : "focusin",
i = "hover" == g ? "mouseleave" : "focusout";
this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
}
}
this.options.selector ? this._options = a.extend({}, this.options, {
trigger: "manual",
selector: ""
}) : this.fixTitle()
}, c.prototype.getDefaults = function() {
return c.DEFAULTS
}, c.prototype.getOptions = function(b) {
return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
show: b.delay,
hide: b.delay
}), b
}, c.prototype.getDelegateOptions = function() {
var b = {},
c = this.getDefaults();
return this._options && a.each(this._options, function(a, d) {
c[a] != d && (b[a] = d)
}), b
}, c.prototype.enter = function(b) {
var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), b instanceof a.Event && (c.inState["focusin" == b.type ? "focus" : "hover"] = !0), c.tip().hasClass("in") || "in" == c.hoverState ? void(c.hoverState = "in") : (clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function() {
"in" == c.hoverState && c.show()
}, c.options.delay.show)) : c.show())
}, c.prototype.isInStateTrue = function() {
for (var a in this.inState)
if (this.inState[a]) return !0;
return !1
}, c.prototype.leave = function(b) {
var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
if (c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), b instanceof a.Event && (c.inState["focusout" == b.type ? "focus" : "hover"] = !1), !c.isInStateTrue()) return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function() {
"out" == c.hoverState && c.hide()
}, c.options.delay.hide)) : c.hide()
}, c.prototype.show = function() {
var b = a.Event("show.bs." + this.type);
if (this.hasContent() && this.enabled) {
this.$element.trigger(b);
var d = a.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
if (b.isDefaultPrevented() || !d) return;
var e = this,
f = this.tip(),
g = this.getUID(this.type);
this.setContent(), f.attr("id", g), this.$element.attr("aria-describedby", g), this.options.animation && f.addClass("fade");
var h = "function" == typeof this.options.placement ? this.options.placement.call(this, f[0], this.$element[0]) : this.options.placement,
i = /\s?auto?\s?/i,
j = i.test(h);
j && (h = h.replace(i, "") || "top"), f.detach().css({
top: 0,
left: 0,
display: "block"
}).addClass(h).data("bs." + this.type, this), this.options.container ? f.appendTo(this.options.container) : f.insertAfter(this.$element), this.$element.trigger("inserted.bs." + this.type);
var k = this.getPosition(),
l = f[0].offsetWidth,
m = f[0].offsetHeight;
if (j) {
var n = h,
o = this.getPosition(this.$viewport);
h = "bottom" == h && k.bottom + m > o.bottom ? "top" : "top" == h && k.top - m < o.top ? "bottom" : "right" == h && k.right + l > o.width ? "left" : "left" == h && k.left - l < o.left ? "right" : h, f.removeClass(n).addClass(h)
}
var p = this.getCalculatedOffset(h, k, l, m);
this.applyPlacement(p, h);
var q = function() {
var a = e.hoverState;
e.$element.trigger("shown.bs." + e.type), e.hoverState = null, "out" == a && e.leave(e)
};
a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", q).emulateTransitionEnd(c.TRANSITION_DURATION) : q()
}
}, c.prototype.applyPlacement = function(b, c) {
var d = this.tip(),
e = d[0].offsetWidth,
f = d[0].offsetHeight,
g = parseInt(d.css("margin-top"), 10),
h = parseInt(d.css("margin-left"), 10);
isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top += g, b.left += h, a.offset.setOffset(d[0], a.extend({
using: function(a) {
d.css({
top: Math.round(a.top),
left: Math.round(a.left)
})
}
}, b), 0), d.addClass("in");
var i = d[0].offsetWidth,
j = d[0].offsetHeight;
"top" == c && j != f && (b.top = b.top + f - j);
var k = this.getViewportAdjustedDelta(c, b, i, j);
k.left ? b.left += k.left : b.top += k.top;
var l = /top|bottom/.test(c),
m = l ? 2 * k.left - e + i : 2 * k.top - f + j,
n = l ? "offsetWidth" : "offsetHeight";
d.offset(b), this.replaceArrow(m, d[0][n], l)
}, c.prototype.replaceArrow = function(a, b, c) {
this.arrow().css(c ? "left" : "top", 50 * (1 - a / b) + "%").css(c ? "top" : "left", "")
}, c.prototype.setContent = function() {
var a = this.tip(),
b = this.getTitle();
a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
}, c.prototype.hide = function(b) {
function d() {
"in" != e.hoverState && f.detach(), e.$element && e.$element.removeAttr("aria-describedby").trigger("hidden.bs." + e.type), b && b()
}
var e = this,
f = a(this.$tip),
g = a.Event("hide.bs." + this.type);
if (this.$element.trigger(g), !g.isDefaultPrevented()) return f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one("bsTransitionEnd", d).emulateTransitionEnd(c.TRANSITION_DURATION) : d(), this.hoverState = null, this
}, c.prototype.fixTitle = function() {
var a = this.$element;
(a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "")
}, c.prototype.hasContent = function() {
return this.getTitle()
}, c.prototype.getPosition = function(b) {
b = b || this.$element;
var c = b[0],
d = "BODY" == c.tagName,
e = c.getBoundingClientRect();
null == e.width && (e = a.extend({}, e, {
width: e.right - e.left,
height: e.bottom - e.top
}));
var f = window.SVGElement && c instanceof window.SVGElement,
g = d ? {
top: 0,
left: 0
} : f ? null : b.offset(),
h = {
scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop()
},
i = d ? {
width: a(window).width(),
height: a(window).height()
} : null;
return a.extend({}, e, h, i, g)
}, c.prototype.getCalculatedOffset = function(a, b, c, d) {
return "bottom" == a ? {
top: b.top + b.height,
left: b.left + b.width / 2 - c / 2
} : "top" == a ? {
top: b.top - d,
left: b.left + b.width / 2 - c / 2
} : "left" == a ? {
top: b.top + b.height / 2 - d / 2,
left: b.left - c
} : {
top: b.top + b.height / 2 - d / 2,
left: b.left + b.width
}
}, c.prototype.getViewportAdjustedDelta = function(a, b, c, d) {
var e = {
top: 0,
left: 0
};
if (!this.$viewport) return e;
var f = this.options.viewport && this.options.viewport.padding || 0,
g = this.getPosition(this.$viewport);
if (/right|left/.test(a)) {
var h = b.top - f - g.scroll,
i = b.top + f - g.scroll + d;
h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i)
} else {
var j = b.left - f,
k = b.left + f + c;
j < g.left ? e.left = g.left - j : k > g.right && (e.left = g.left + g.width - k)
}
return e
}, c.prototype.getTitle = function() {
var a, b = this.$element,
c = this.options;
return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
}, c.prototype.getUID = function(a) {
do a += ~~(1e6 * Math.random()); while (document.getElementById(a));
return a
}, c.prototype.tip = function() {
if (!this.$tip && (this.$tip = a(this.options.template), 1 != this.$tip.length)) throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!");
return this.$tip
}, c.prototype.arrow = function() {
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
}, c.prototype.enable = function() {
this.enabled = !0
}, c.prototype.disable = function() {
this.enabled = !1
}, c.prototype.toggleEnabled = function() {
this.enabled = !this.enabled
}, c.prototype.toggle = function(b) {
var c = this;
b && (c = a(b.currentTarget).data("bs." + this.type), c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c))), b ? (c.inState.click = !c.inState.click, c.isInStateTrue() ? c.enter(c) : c.leave(c)) : c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
}, c.prototype.destroy = function() {
var a = this;
clearTimeout(this.timeout), this.hide(function() {
a.$element.off("." + a.type).removeData("bs." + a.type), a.$tip && a.$tip.detach(), a.$tip = null, a.$arrow = null, a.$viewport = null, a.$element = null
})
};
var d = a.fn.tooltip;
a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function() {
return a.fn.tooltip = d, this
}
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.popover"),
f = "object" == typeof b && b;
!e && /destroy|hide/.test(b) || (e || d.data("bs.popover", e = new c(this, f)), "string" == typeof b && e[b]())
})
}
var c = function(a, b) {
this.init("popover", a, b)
};
if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
c.VERSION = "3.3.7", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
placement: "right",
trigger: "click",
content: "",
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
}), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function() {
return c.DEFAULTS
}, c.prototype.setContent = function() {
var a = this.tip(),
b = this.getTitle(),
c = this.getContent();
a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
}, c.prototype.hasContent = function() {
return this.getTitle() || this.getContent()
}, c.prototype.getContent = function() {
var a = this.$element,
b = this.options;
return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
}, c.prototype.arrow = function() {
return this.$arrow = this.$arrow || this.tip().find(".arrow")
};
var d = a.fn.popover;
a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function() {
return a.fn.popover = d, this
}
}(jQuery), + function(a) {
"use strict";
function b(c, d) {
this.$body = a(document.body), this.$scrollElement = a(a(c).is(document.body) ? window : c), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", a.proxy(this.process, this)), this.refresh(), this.process()
}
function c(c) {
return this.each(function() {
var d = a(this),
e = d.data("bs.scrollspy"),
f = "object" == typeof c && c;
e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
})
}
b.VERSION = "3.3.7", b.DEFAULTS = {
offset: 10
}, b.prototype.getScrollHeight = function() {
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
}, b.prototype.refresh = function() {
var b = this,
c = "offset",
d = 0;
this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight(), a.isWindow(this.$scrollElement[0]) || (c = "position", d = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function() {
var b = a(this),
e = b.data("target") || b.attr("href"),
f = /^#./.test(e) && a(e);
return f && f.length && f.is(":visible") && [
[f[c]().top + d, e]
] || null
}).sort(function(a, b) {
return a[0] - b[0]
}).each(function() {
b.offsets.push(this[0]), b.targets.push(this[1])
})
}, b.prototype.process = function() {
var a, b = this.$scrollElement.scrollTop() + this.options.offset,
c = this.getScrollHeight(),
d = this.options.offset + c - this.$scrollElement.height(),
e = this.offsets,
f = this.targets,
g = this.activeTarget;
if (this.scrollHeight != c && this.refresh(), b >= d) return g != (a = f[f.length - 1]) && this.activate(a);
if (g && b < e[0]) return this.activeTarget = null, this.clear();
for (a = e.length; a--;) g != f[a] && b >= e[a] && (void 0 === e[a + 1] || b < e[a + 1]) && this.activate(f[a])
}, b.prototype.activate = function(b) {
this.activeTarget = b, this.clear();
var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
d = a(c).parents("li").addClass("active");
d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
}, b.prototype.clear = function() {
a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
};
var d = a.fn.scrollspy;
a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function() {
return a.fn.scrollspy = d, this
}, a(window).on("load.bs.scrollspy.data-api", function() {
a('[data-spy="scroll"]').each(function() {
var b = a(this);
c.call(b, b.data())
})
})
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.tab");
e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b]()
})
}
var c = function(b) {
this.element = a(b)
};
c.VERSION = "3.3.7", c.TRANSITION_DURATION = 150, c.prototype.show = function() {
var b = this.element,
c = b.closest("ul:not(.dropdown-menu)"),
d = b.data("target");
if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
var e = c.find(".active:last a"),
f = a.Event("hide.bs.tab", {
relatedTarget: b[0]
}),
g = a.Event("show.bs.tab", {
relatedTarget: e[0]
});
if (e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented()) {
var h = a(d);
this.activate(b.closest("li"), c), this.activate(h, h.parent(), function() {
e.trigger({
type: "hidden.bs.tab",
relatedTarget: b[0]
}), b.trigger({
type: "shown.bs.tab",
relatedTarget: e[0]
})
})
}
}
}, c.prototype.activate = function(b, d, e) {
function f() {
g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), h ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu").length && b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), e && e()
}
var g = d.find("> .active"),
h = e && a.support.transition && (g.length && g.hasClass("fade") || !!d.find("> .fade").length);
g.length && h ? g.one("bsTransitionEnd", f).emulateTransitionEnd(c.TRANSITION_DURATION) : f(), g.removeClass("in")
};
var d = a.fn.tab;
a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function() {
return a.fn.tab = d, this
};
var e = function(c) {
c.preventDefault(), b.call(a(this), "show")
};
a(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', e).on("click.bs.tab.data-api", '[data-toggle="pill"]', e)
}(jQuery), + function(a) {
"use strict";
function b(b) {
return this.each(function() {
var d = a(this),
e = d.data("bs.affix"),
f = "object" == typeof b && b;
e || d.data("bs.affix", e = new c(this, f)), "string" == typeof b && e[b]()
})
}
var c = function(b, d) {
this.options = a.extend({}, c.DEFAULTS, d), this.$target = a(this.options.target).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(b), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition()
};
c.VERSION = "3.3.7", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = {
offset: 0,
target: window
}, c.prototype.getState = function(a, b, c, d) {
var e = this.$target.scrollTop(),
f = this.$element.offset(),
g = this.$target.height();
if (null != c && "top" == this.affixed) return e < c && "top";
if ("bottom" == this.affixed) return null != c ? !(e + this.unpin <= f.top) && "bottom" : !(e + g <= a - d) && "bottom";
var h = null == this.affixed,
i = h ? e : f.top,
j = h ? g : b;
return null != c && e <= c ? "top" : null != d && i + j >= a - d && "bottom"
}, c.prototype.getPinnedOffset = function() {
if (this.pinnedOffset) return this.pinnedOffset;
this.$element.removeClass(c.RESET).addClass("affix");
var a = this.$target.scrollTop(),
b = this.$element.offset();
return this.pinnedOffset = b.top - a
}, c.prototype.checkPositionWithEventLoop = function() {
setTimeout(a.proxy(this.checkPosition, this), 1)
}, c.prototype.checkPosition = function() {
if (this.$element.is(":visible")) {
var b = this.$element.height(),
d = this.options.offset,
e = d.top,
f = d.bottom,
g = Math.max(a(document).height(), a(document.body).height());
"object" != typeof d && (f = e = d), "function" == typeof e && (e = d.top(this.$element)), "function" == typeof f && (f = d.bottom(this.$element));
var h = this.getState(g, b, e, f);
if (this.affixed != h) {
null != this.unpin && this.$element.css("top", "");
var i = "affix" + (h ? "-" + h : ""),
j = a.Event(i + ".bs.affix");
if (this.$element.trigger(j), j.isDefaultPrevented()) return;
this.affixed = h, this.unpin = "bottom" == h ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix", "affixed") + ".bs.affix")
}
"bottom" == h && this.$element.offset({
top: g - b - f
})
}
};
var d = a.fn.affix;
a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function() {
return a.fn.affix = d, this
}, a(window).on("load", function() {
a('[data-spy="affix"]').each(function() {
var c = a(this),
d = c.data();
d.offset = d.offset || {}, null != d.offsetBottom && (d.offset.bottom = d.offsetBottom), null != d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d)
})
})
}(jQuery);

4
Source/SITE/JS/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

26
Source/SITE/JS/main.min.js vendored Normal file
View File

@ -0,0 +1,26 @@
! function(o) {
"use strict";
o(window).on("load", function() {
o("#preloader").delay(600).fadeOut()
}), o("body").scrollspy({
target: "#nav",
offset: o(window).height() / 2
}), o("#nav .main-nav a[href^='#']").on("click", function(n) {
n.preventDefault();
this.hash;
o("html, body").animate({
scrollTop: o(this.hash).offset().top
}, 600)
}), o("#back-to-top").on("click", function() {
o("body,html").animate({
scrollTop: 0
}, 600)
}), o("#nav .nav-collapse").on("click", function() {
o("#nav").toggleClass("open")
}), o(".has-dropdown a").on("click", function() {
o(this).parent().toggleClass("open-drop")
}), o(window).on("scroll", function() {
var n = o(this).scrollTop();
n > 1 ? o("#nav").addClass("fixed-nav") : o("#nav").removeClass("fixed-nav"), n > 700 ? o("#back-to-top").fadeIn() : o("#back-to-top").fadeOut()
})
}(jQuery);

250
Source/SITE/JS/sign-lib-min.js vendored Normal file
View File

@ -0,0 +1,250 @@
/*
The buffer module from node.js, for the browser.
@author Feross Aboukhadijeh <https://feross.org>
@license MIT
Determine if an object is a Buffer
@author Feross Aboukhadijeh <https://feross.org>
@license MIT
*/
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(f){var k=0;return function(){return k<f.length?{done:!1,value:f[k++]}:{done:!0}}};$jscomp.arrayIterator=function(f){return{next:$jscomp.arrayIteratorImpl(f)}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(f,k,h){f!=Array.prototype&&f!=Object.prototype&&(f[k]=h.value)};
$jscomp.getGlobal=function(f){return"undefined"!=typeof window&&window===f?f:"undefined"!=typeof global&&null!=global?global:f};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.Symbol=function(){var f=0;return function(k){return $jscomp.SYMBOL_PREFIX+(k||"")+f++}}();
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var f=$jscomp.global.Symbol.iterator;f||(f=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[f]&&$jscomp.defineProperty(Array.prototype,f,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}});$jscomp.initSymbolIterator=function(){}};
$jscomp.initSymbolAsyncIterator=function(){$jscomp.initSymbol();var f=$jscomp.global.Symbol.asyncIterator;f||(f=$jscomp.global.Symbol.asyncIterator=$jscomp.global.Symbol("asyncIterator"));$jscomp.initSymbolAsyncIterator=function(){}};$jscomp.iteratorPrototype=function(f){$jscomp.initSymbolIterator();f={next:f};f[$jscomp.global.Symbol.iterator]=function(){return this};return f};
(function(){function f(k,h,d){function e(a,b){if(!h[a]){if(!k[a]){var m="function"==typeof require&&require;if(!b&&m)return m(a,!0);if(c)return c(a,!0);m=Error("Cannot find module '"+a+"'");throw m.code="MODULE_NOT_FOUND",m;}m=h[a]={exports:{}};k[a][0].call(m.exports,function(b){return e(k[a][1][b]||b)},m,m.exports,f,k,h,d)}return h[a].exports}for(var c="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}return f})()({1:[function(f,k,h){function d(a){var b=a.length;if(0<b%4)throw Error("Invalid string. Length must be a multiple of 4");
a=a.indexOf("=");-1===a&&(a=b);return[a,a===b?0:4-a%4]}function e(a,d,g){for(var b=[],e=d;e<g;e+=3)d=(a[e]<<16&16711680)+(a[e+1]<<8&65280)+(a[e+2]&255),b.push(c[d>>18&63]+c[d>>12&63]+c[d>>6&63]+c[d&63]);return b.join("")}h.byteLength=function(a){a=d(a);var b=a[1];return 3*(a[0]+b)/4-b};h.toByteArray=function(b){var c=d(b);var e=c[0];c=c[1];for(var t=new a(3*(e+c)/4-c),n=0,q=0<c?e-4:e,f=0;f<q;f+=4)e=g[b.charCodeAt(f)]<<18|g[b.charCodeAt(f+1)]<<12|g[b.charCodeAt(f+2)]<<6|g[b.charCodeAt(f+3)],t[n++]=
e>>16&255,t[n++]=e>>8&255,t[n++]=e&255;2===c&&(e=g[b.charCodeAt(f)]<<2|g[b.charCodeAt(f+1)]>>4,t[n++]=e&255);1===c&&(e=g[b.charCodeAt(f)]<<10|g[b.charCodeAt(f+1)]<<4|g[b.charCodeAt(f+2)]>>2,t[n++]=e>>8&255,t[n++]=e&255);return t};h.fromByteArray=function(a){for(var b=a.length,d=b%3,g=[],n=0,q=b-d;n<q;n+=16383)g.push(e(a,n,n+16383>q?q:n+16383));1===d?(a=a[b-1],g.push(c[a>>2]+c[a<<4&63]+"==")):2===d&&(a=(a[b-2]<<8)+a[b-1],g.push(c[a>>10]+c[a>>4&63]+c[a<<2&63]+"="));return g.join("")};var c=[],g=[],
a="undefined"!==typeof Uint8Array?Uint8Array:Array;for(f=0;64>f;++f)c[f]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[f],g["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(f)]=f;g[45]=62;g[95]=63},{}],2:[function(f,k,h){},{}],3:[function(f,k,h){function d(a){if(a>J)throw new RangeError("Invalid typed array length");a=new Uint8Array(a);a.__proto__=e.prototype;return a}function e(w,b,l){if("number"===typeof w){if("string"===typeof b)throw Error("If encoding is specified then the first argument must be a string");
return a(w)}return c(w,b,l)}function c(a,b,l){if("number"===typeof a)throw new TypeError('"value" argument must not be a number');if(K(a)||a&&K(a.buffer)){if(0>b||a.byteLength<b)throw new RangeError('"offset" is outside of buffer bounds');if(a.byteLength<b+(l||0))throw new RangeError('"length" is outside of buffer bounds');a=void 0===b&&void 0===l?new Uint8Array(a):void 0===l?new Uint8Array(a,b):new Uint8Array(a,b,l);a.__proto__=e.prototype;return a}if("string"===typeof a){var w=b;if("string"!==typeof w||
""===w)w="utf8";if(!e.isEncoding(w))throw new TypeError("Unknown encoding: "+w);b=t(a,w)|0;l=d(b);a=l.write(a,w);a!==b&&(l=l.slice(0,a));return l}return m(a)}function g(a){if("number"!==typeof a)throw new TypeError('"size" argument must be of type number');if(0>a)throw new RangeError('"size" argument must not be negative');}function a(a){g(a);return d(0>a?0:p(a)|0)}function b(a){for(var w=0>a.length?0:p(a.length)|0,l=d(w),b=0;b<w;b+=1)l[b]=a[b]&255;return l}function m(a){if(e.isBuffer(a)){var w=p(a.length)|
0,l=d(w);if(0===l.length)return l;a.copy(l,0,0,w);return l}if(a){if(ArrayBuffer.isView(a)||"length"in a)return(w="number"!==typeof a.length)||(w=a.length,w=w!==w),w?d(0):b(a);if("Buffer"===a.type&&Array.isArray(a.data))return b(a.data)}throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.");}function p(a){if(a>=J)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+J.toString(16)+" bytes");return a|0}function t(a,
b){if(e.isBuffer(a))return a.length;if(ArrayBuffer.isView(a)||K(a))return a.byteLength;"string"!==typeof a&&(a=""+a);var l=a.length;if(0===l)return 0;for(var w=!1;;)switch(b){case "ascii":case "latin1":case "binary":return l;case "utf8":case "utf-8":case void 0:return C(a).length;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return 2*l;case "hex":return l>>>1;case "base64":return D.toByteArray(G(a)).length;default:if(w)return C(a).length;b=(""+b).toLowerCase();w=!0}}function n(a,b,l){var c=
!1;if(void 0===b||0>b)b=0;if(b>this.length)return"";if(void 0===l||l>this.length)l=this.length;if(0>=l)return"";l>>>=0;b>>>=0;if(l<=b)return"";for(a||(a="utf8");;)switch(a){case "hex":a=b;b=l;l=this.length;if(!a||0>a)a=0;if(!b||0>b||b>l)b=l;c="";for(l=a;l<b;++l)a=c,c=this[l],c=16>c?"0"+c.toString(16):c.toString(16),c=a+c;return c;case "utf8":case "utf-8":return v(this,b,l);case "ascii":a="";for(l=Math.min(this.length,l);b<l;++b)a+=String.fromCharCode(this[b]&127);return a;case "latin1":case "binary":a=
"";for(l=Math.min(this.length,l);b<l;++b)a+=String.fromCharCode(this[b]);return a;case "base64":return b=0===b&&l===this.length?D.fromByteArray(this):D.fromByteArray(this.slice(b,l)),b;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":b=this.slice(b,l);l="";for(a=0;a<b.length;a+=2)l+=String.fromCharCode(b[a]+256*b[a+1]);return l;default:if(c)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase();c=!0}}function q(a,b,l){var c=a[b];a[b]=a[l];a[l]=c}function Q(a,b,l,c,d){if(0===a.length)return-1;
"string"===typeof l?(c=l,l=0):2147483647<l?l=2147483647:-2147483648>l&&(l=-2147483648);l=+l;l!==l&&(l=d?0:a.length-1);0>l&&(l=a.length+l);if(l>=a.length){if(d)return-1;l=a.length-1}else if(0>l)if(d)l=0;else return-1;"string"===typeof b&&(b=e.from(b,c));if(e.isBuffer(b))return 0===b.length?-1:N(a,b,l,c,d);if("number"===typeof b)return b&=255,"function"===typeof Uint8Array.prototype.indexOf?d?Uint8Array.prototype.indexOf.call(a,b,l):Uint8Array.prototype.lastIndexOf.call(a,b,l):N(a,[b],l,c,d);throw new TypeError("val must be string, number or Buffer");
}function N(a,b,l,c,d){function w(a,b){return 1===e?a[b]:a.readUInt16BE(b*e)}var e=1,g=a.length,m=b.length;if(void 0!==c&&(c=String(c).toLowerCase(),"ucs2"===c||"ucs-2"===c||"utf16le"===c||"utf-16le"===c)){if(2>a.length||2>b.length)return-1;e=2;g/=2;m/=2;l/=2}if(d)for(c=-1;l<g;l++)if(w(a,l)===w(b,-1===c?0:l-c)){if(-1===c&&(c=l),l-c+1===m)return c*e}else-1!==c&&(l-=l-c),c=-1;else for(l+m>g&&(l=g-m);0<=l;l--){g=!0;for(c=0;c<m;c++)if(w(a,l+c)!==w(b,c)){g=!1;break}if(g)return l}return-1}function v(a,
b,l){l=Math.min(a.length,l);for(var c=[];b<l;){var d=a[b],e=null,w=239<d?4:223<d?3:191<d?2:1;if(b+w<=l)switch(w){case 1:128>d&&(e=d);break;case 2:var g=a[b+1];128===(g&192)&&(d=(d&31)<<6|g&63,127<d&&(e=d));break;case 3:g=a[b+1];var m=a[b+2];128===(g&192)&&128===(m&192)&&(d=(d&15)<<12|(g&63)<<6|m&63,2047<d&&(55296>d||57343<d)&&(e=d));break;case 4:g=a[b+1];m=a[b+2];var M=a[b+3];128===(g&192)&&128===(m&192)&&128===(M&192)&&(d=(d&15)<<18|(g&63)<<12|(m&63)<<6|M&63,65535<d&&1114112>d&&(e=d))}null===e?(e=
65533,w=1):65535<e&&(e-=65536,c.push(e>>>10&1023|55296),e=56320|e&1023);c.push(e);b+=w}a=c.length;if(a<=y)c=String.fromCharCode.apply(String,c);else{l="";for(b=0;b<a;)l+=String.fromCharCode.apply(String,c.slice(b,b+=y));c=l}return c}function B(a,b,l){if(0!==a%1||0>a)throw new RangeError("offset is not uint");if(a+b>l)throw new RangeError("Trying to access beyond buffer length");}function z(a,b,l,c,d,g){if(!e.isBuffer(a))throw new TypeError('"buffer" argument must be a Buffer instance');if(b>d||b<
g)throw new RangeError('"value" argument is out of bounds');if(l+c>a.length)throw new RangeError("Index out of range");}function x(a,b,l,c,d,e){if(l+c>a.length)throw new RangeError("Index out of range");if(0>l)throw new RangeError("Index out of range");}function H(a,b,l,c,d){b=+b;l>>>=0;d||x(a,b,l,4,3.4028234663852886E38,-3.4028234663852886E38);I.write(a,b,l,c,23,4);return l+4}function F(a,b,l,c,d){b=+b;l>>>=0;d||x(a,b,l,8,1.7976931348623157E308,-1.7976931348623157E308);I.write(a,b,l,c,52,8);return l+
8}function G(a){a=a.split("=")[0];a=a.trim().replace(L,"");if(2>a.length)return"";for(;0!==a.length%4;)a+="=";return a}function C(a,b){b=b||Infinity;for(var l,c=a.length,d=null,e=[],g=0;g<c;++g){l=a.charCodeAt(g);if(55295<l&&57344>l){if(!d){if(56319<l){-1<(b-=3)&&e.push(239,191,189);continue}else if(g+1===c){-1<(b-=3)&&e.push(239,191,189);continue}d=l;continue}if(56320>l){-1<(b-=3)&&e.push(239,191,189);d=l;continue}l=(d-55296<<10|l-56320)+65536}else d&&-1<(b-=3)&&e.push(239,191,189);d=null;if(128>
l){if(0>--b)break;e.push(l)}else if(2048>l){if(0>(b-=2))break;e.push(l>>6|192,l&63|128)}else if(65536>l){if(0>(b-=3))break;e.push(l>>12|224,l>>6&63|128,l&63|128)}else if(1114112>l){if(0>(b-=4))break;e.push(l>>18|240,l>>12&63|128,l>>6&63|128,l&63|128)}else throw Error("Invalid code point");}return e}function A(a){for(var b=[],l=0;l<a.length;++l)b.push(a.charCodeAt(l)&255);return b}function E(a,b,l,c){for(var d=0;d<c&&!(d+l>=b.length||d>=a.length);++d)b[d+l]=a[d];return d}function K(a){return a instanceof
ArrayBuffer||null!=a&&null!=a.constructor&&"ArrayBuffer"===a.constructor.name&&"number"===typeof a.byteLength}var D=f("base64-js"),I=f("ieee754");h.Buffer=e;h.SlowBuffer=function(a){+a!=a&&(a=0);return e.alloc(+a)};h.INSPECT_MAX_BYTES=50;var J=2147483647;h.kMaxLength=J;e.TYPED_ARRAY_SUPPORT=function(){try{var a=new Uint8Array(1);a.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return 42===a.foo()}catch(M){return!1}}();e.TYPED_ARRAY_SUPPORT||"undefined"===typeof console||"function"!==
typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");Object.defineProperty(e.prototype,"parent",{get:function(){if(this instanceof e)return this.buffer}});Object.defineProperty(e.prototype,"offset",{get:function(){if(this instanceof e)return this.byteOffset}});$jscomp.initSymbol();$jscomp.initSymbol();$jscomp.initSymbol();"undefined"!==typeof Symbol&&Symbol.species&&e[Symbol.species]===
e&&($jscomp.initSymbol(),Object.defineProperty(e,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}));e.poolSize=8192;e.from=function(a,b,l){return c(a,b,l)};e.prototype.__proto__=Uint8Array.prototype;e.__proto__=Uint8Array;e.alloc=function(a,b,l){g(a);a=0>=a?d(a):void 0!==b?"string"===typeof l?d(a).fill(b,l):d(a).fill(b):d(a);return a};e.allocUnsafe=function(b){return a(b)};e.allocUnsafeSlow=function(b){return a(b)};e.isBuffer=function(a){return null!=a&&!0===a._isBuffer};e.compare=
function(a,b){if(!e.isBuffer(a)||!e.isBuffer(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var l=a.length,c=b.length,d=0,g=Math.min(l,c);d<g;++d)if(a[d]!==b[d]){l=a[d];c=b[d];break}return l<c?-1:c<l?1:0};e.isEncoding=function(a){switch(String(a).toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "latin1":case "binary":case "base64":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return!0;default:return!1}};e.concat=function(a,b){if(!Array.isArray(a))throw new TypeError('"list" argument must be an Array of Buffers');
if(0===a.length)return e.alloc(0);var c;if(void 0===b)for(c=b=0;c<a.length;++c)b+=a[c].length;var d=e.allocUnsafe(b),g=0;for(c=0;c<a.length;++c){var m=a[c];ArrayBuffer.isView(m)&&(m=e.from(m));if(!e.isBuffer(m))throw new TypeError('"list" argument must be an Array of Buffers');m.copy(d,g);g+=m.length}return d};e.byteLength=t;e.prototype._isBuffer=!0;e.prototype.swap16=function(){var a=this.length;if(0!==a%2)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var b=0;b<a;b+=2)q(this,
b,b+1);return this};e.prototype.swap32=function(){var a=this.length;if(0!==a%4)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var b=0;b<a;b+=4)q(this,b,b+3),q(this,b+1,b+2);return this};e.prototype.swap64=function(){var a=this.length;if(0!==a%8)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var b=0;b<a;b+=8)q(this,b,b+7),q(this,b+1,b+6),q(this,b+2,b+5),q(this,b+3,b+4);return this};e.prototype.toString=function(){var a=this.length;return 0===a?"":0===arguments.length?
v(this,0,a):n.apply(this,arguments)};e.prototype.toLocaleString=e.prototype.toString;e.prototype.equals=function(a){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");return this===a?!0:0===e.compare(this,a)};e.prototype.inspect=function(){var a="",b=h.INSPECT_MAX_BYTES;0<this.length&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... "));return"<Buffer "+a+">"};e.prototype.compare=function(a,b,c,d,g){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");
void 0===b&&(b=0);void 0===c&&(c=a?a.length:0);void 0===d&&(d=0);void 0===g&&(g=this.length);if(0>b||c>a.length||0>d||g>this.length)throw new RangeError("out of range index");if(d>=g&&b>=c)return 0;if(d>=g)return-1;if(b>=c)return 1;b>>>=0;c>>>=0;d>>>=0;g>>>=0;if(this===a)return 0;var l=g-d,m=c-b,p=Math.min(l,m);d=this.slice(d,g);a=a.slice(b,c);for(b=0;b<p;++b)if(d[b]!==a[b]){l=d[b];m=a[b];break}return l<m?-1:m<l?1:0};e.prototype.includes=function(a,b,c){return-1!==this.indexOf(a,b,c)};e.prototype.indexOf=
function(a,b,c){return Q(this,a,b,c,!0)};e.prototype.lastIndexOf=function(a,b,c){return Q(this,a,b,c,!1)};e.prototype.write=function(a,b,c,d){if(void 0===b)d="utf8",c=this.length,b=0;else if(void 0===c&&"string"===typeof b)d=b,c=this.length,b=0;else if(isFinite(b))b>>>=0,isFinite(c)?(c>>>=0,void 0===d&&(d="utf8")):(d=c,c=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var l=this.length-b;if(void 0===c||c>l)c=l;if(0<a.length&&(0>c||0>b)||b>this.length)throw new RangeError("Attempt to write outside buffer bounds");
d||(d="utf8");for(l=!1;;)switch(d){case "hex":a:{b=Number(b)||0;d=this.length-b;c?(c=Number(c),c>d&&(c=d)):c=d;d=a.length;c>d/2&&(c=d/2);for(d=0;d<c;++d){l=parseInt(a.substr(2*d,2),16);if(l!==l){a=d;break a}this[b+d]=l}a=d}return a;case "utf8":case "utf-8":return E(C(a,this.length-b),this,b,c);case "ascii":return E(A(a),this,b,c);case "latin1":case "binary":return E(A(a),this,b,c);case "base64":return E(D.toByteArray(G(a)),this,b,c);case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":d=a;l=this.length-
b;for(var e=[],g=0;g<d.length&&!(0>(l-=2));++g){var m=d.charCodeAt(g);a=m>>8;m%=256;e.push(m);e.push(a)}return E(e,this,b,c);default:if(l)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase();l=!0}};e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var y=4096;e.prototype.slice=function(a,b){var c=this.length;a=~~a;b=void 0===b?c:~~b;0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c);0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c);b<a&&(b=a);c=this.subarray(a,b);c.__proto__=
e.prototype;return c};e.prototype.readUIntLE=function(a,b,c){a>>>=0;b>>>=0;c||B(a,b,this.length);c=this[a];for(var d=1,l=0;++l<b&&(d*=256);)c+=this[a+l]*d;return c};e.prototype.readUIntBE=function(a,b,c){a>>>=0;b>>>=0;c||B(a,b,this.length);c=this[a+--b];for(var d=1;0<b&&(d*=256);)c+=this[a+--b]*d;return c};e.prototype.readUInt8=function(a,b){a>>>=0;b||B(a,1,this.length);return this[a]};e.prototype.readUInt16LE=function(a,b){a>>>=0;b||B(a,2,this.length);return this[a]|this[a+1]<<8};e.prototype.readUInt16BE=
function(a,b){a>>>=0;b||B(a,2,this.length);return this[a]<<8|this[a+1]};e.prototype.readUInt32LE=function(a,b){a>>>=0;b||B(a,4,this.length);return(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]};e.prototype.readUInt32BE=function(a,b){a>>>=0;b||B(a,4,this.length);return 16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])};e.prototype.readIntLE=function(a,b,c){a>>>=0;b>>>=0;c||B(a,b,this.length);c=this[a];for(var d=1,l=0;++l<b&&(d*=256);)c+=this[a+l]*d;c>=128*d&&(c-=Math.pow(2,8*b));return c};
e.prototype.readIntBE=function(a,b,c){a>>>=0;b>>>=0;c||B(a,b,this.length);c=b;for(var d=1,l=this[a+--c];0<c&&(d*=256);)l+=this[a+--c]*d;l>=128*d&&(l-=Math.pow(2,8*b));return l};e.prototype.readInt8=function(a,b){a>>>=0;b||B(a,1,this.length);return this[a]&128?-1*(255-this[a]+1):this[a]};e.prototype.readInt16LE=function(a,b){a>>>=0;b||B(a,2,this.length);var c=this[a]|this[a+1]<<8;return c&32768?c|4294901760:c};e.prototype.readInt16BE=function(a,b){a>>>=0;b||B(a,2,this.length);var c=this[a+1]|this[a]<<
8;return c&32768?c|4294901760:c};e.prototype.readInt32LE=function(a,b){a>>>=0;b||B(a,4,this.length);return this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24};e.prototype.readInt32BE=function(a,b){a>>>=0;b||B(a,4,this.length);return this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]};e.prototype.readFloatLE=function(a,b){a>>>=0;b||B(a,4,this.length);return I.read(this,a,!0,23,4)};e.prototype.readFloatBE=function(a,b){a>>>=0;b||B(a,4,this.length);return I.read(this,a,!1,23,4)};e.prototype.readDoubleLE=
function(a,b){a>>>=0;b||B(a,8,this.length);return I.read(this,a,!0,52,8)};e.prototype.readDoubleBE=function(a,b){a>>>=0;b||B(a,8,this.length);return I.read(this,a,!1,52,8)};e.prototype.writeUIntLE=function(a,b,c,d){a=+a;b>>>=0;c>>>=0;d||z(this,a,b,c,Math.pow(2,8*c)-1,0);d=1;var e=0;for(this[b]=a&255;++e<c&&(d*=256);)this[b+e]=a/d&255;return b+c};e.prototype.writeUIntBE=function(a,b,c,d){a=+a;b>>>=0;c>>>=0;d||z(this,a,b,c,Math.pow(2,8*c)-1,0);d=c-1;var e=1;for(this[b+d]=a&255;0<=--d&&(e*=256);)this[b+
d]=a/e&255;return b+c};e.prototype.writeUInt8=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,1,255,0);this[b]=a&255;return b+1};e.prototype.writeUInt16LE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,2,65535,0);this[b]=a&255;this[b+1]=a>>>8;return b+2};e.prototype.writeUInt16BE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,2,65535,0);this[b]=a>>>8;this[b+1]=a&255;return b+2};e.prototype.writeUInt32LE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,4,4294967295,0);this[b+3]=a>>>24;this[b+2]=a>>>16;this[b+1]=a>>>8;this[b]=
a&255;return b+4};e.prototype.writeUInt32BE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,4,4294967295,0);this[b]=a>>>24;this[b+1]=a>>>16;this[b+2]=a>>>8;this[b+3]=a&255;return b+4};e.prototype.writeIntLE=function(a,b,c,d){a=+a;b>>>=0;d||(d=Math.pow(2,8*c-1),z(this,a,b,c,d-1,-d));d=0;var e=1,g=0;for(this[b]=a&255;++d<c&&(e*=256);)0>a&&0===g&&0!==this[b+d-1]&&(g=1),this[b+d]=(a/e>>0)-g&255;return b+c};e.prototype.writeIntBE=function(a,b,c,d){a=+a;b>>>=0;d||(d=Math.pow(2,8*c-1),z(this,a,b,c,d-1,-d));d=
c-1;var e=1,g=0;for(this[b+d]=a&255;0<=--d&&(e*=256);)0>a&&0===g&&0!==this[b+d+1]&&(g=1),this[b+d]=(a/e>>0)-g&255;return b+c};e.prototype.writeInt8=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,1,127,-128);0>a&&(a=255+a+1);this[b]=a&255;return b+1};e.prototype.writeInt16LE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,2,32767,-32768);this[b]=a&255;this[b+1]=a>>>8;return b+2};e.prototype.writeInt16BE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,2,32767,-32768);this[b]=a>>>8;this[b+1]=a&255;return b+2};e.prototype.writeInt32LE=
function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,4,2147483647,-2147483648);this[b]=a&255;this[b+1]=a>>>8;this[b+2]=a>>>16;this[b+3]=a>>>24;return b+4};e.prototype.writeInt32BE=function(a,b,c){a=+a;b>>>=0;c||z(this,a,b,4,2147483647,-2147483648);0>a&&(a=4294967295+a+1);this[b]=a>>>24;this[b+1]=a>>>16;this[b+2]=a>>>8;this[b+3]=a&255;return b+4};e.prototype.writeFloatLE=function(a,b,c){return H(this,a,b,!0,c)};e.prototype.writeFloatBE=function(a,b,c){return H(this,a,b,!1,c)};e.prototype.writeDoubleLE=function(a,
b,c){return F(this,a,b,!0,c)};e.prototype.writeDoubleBE=function(a,b,c){return F(this,a,b,!1,c)};e.prototype.copy=function(a,b,c,d){if(!e.isBuffer(a))throw new TypeError("argument should be a Buffer");c||(c=0);d||0===d||(d=this.length);b>=a.length&&(b=a.length);b||(b=0);0<d&&d<c&&(d=c);if(d===c||0===a.length||0===this.length)return 0;if(0>b)throw new RangeError("targetStart out of bounds");if(0>c||c>=this.length)throw new RangeError("Index out of range");if(0>d)throw new RangeError("sourceEnd out of bounds");
d>this.length&&(d=this.length);a.length-b<d-c&&(d=a.length-b+c);var g=d-c;if(this===a&&"function"===typeof Uint8Array.prototype.copyWithin)this.copyWithin(b,c,d);else if(this===a&&c<b&&b<d)for(d=g-1;0<=d;--d)a[d+b]=this[d+c];else Uint8Array.prototype.set.call(a,this.subarray(c,d),b);return g};e.prototype.fill=function(a,b,c,d){if("string"===typeof a){"string"===typeof b?(d=b,b=0,c=this.length):"string"===typeof c&&(d=c,c=this.length);if(void 0!==d&&"string"!==typeof d)throw new TypeError("encoding must be a string");
if("string"===typeof d&&!e.isEncoding(d))throw new TypeError("Unknown encoding: "+d);if(1===a.length){var g=a.charCodeAt(0);if("utf8"===d&&128>g||"latin1"===d)a=g}}else"number"===typeof a&&(a&=255);if(0>b||this.length<b||this.length<c)throw new RangeError("Out of range index");if(c<=b)return this;b>>>=0;c=void 0===c?this.length:c>>>0;a||(a=0);if("number"===typeof a)for(d=b;d<c;++d)this[d]=a;else{g=e.isBuffer(a)?a:new e(a,d);var m=g.length;if(0===m)throw new TypeError('The value "'+a+'" is invalid for argument "value"');
for(d=0;d<c-b;++d)this[d+b]=g[d%m]}return this};var L=/[^+/0-9A-Za-z-_]/g},{"base64-js":1,ieee754:6}],4:[function(f,k,h){(function(d){h.isArray=function(d){return Array.isArray?Array.isArray(d):"[object Array]"===Object.prototype.toString.call(d)};h.isBoolean=function(d){return"boolean"===typeof d};h.isNull=function(d){return null===d};h.isNullOrUndefined=function(d){return null==d};h.isNumber=function(d){return"number"===typeof d};h.isString=function(d){return"string"===typeof d};h.isSymbol=function(d){return"symbol"===
typeof d};h.isUndefined=function(d){return void 0===d};h.isRegExp=function(d){return"[object RegExp]"===Object.prototype.toString.call(d)};h.isObject=function(d){return"object"===typeof d&&null!==d};h.isDate=function(d){return"[object Date]"===Object.prototype.toString.call(d)};h.isError=function(d){return"[object Error]"===Object.prototype.toString.call(d)||d instanceof Error};h.isFunction=function(d){return"function"===typeof d};h.isPrimitive=function(d){return null===d||"boolean"===typeof d||"number"===
typeof d||"string"===typeof d||"symbol"===typeof d||"undefined"===typeof d};h.isBuffer=d.isBuffer}).call(this,{isBuffer:f("../../is-buffer/index.js")})},{"../../is-buffer/index.js":8}],5:[function(f,k,h){function d(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=q(null),this._eventsCount=0);this._maxListeners=this._maxListeners||void 0}function e(a,b,c,g){var e;if("function"!==typeof c)throw new TypeError('"listener" argument must be a function');if(e=a._events){e.newListener&&
(a.emit("newListener",b,c.listener?c.listener:c),e=a._events);var m=e[b]}else e=a._events=q(null),a._eventsCount=0;m?("function"===typeof m?m=e[b]=g?[c,m]:[m,c]:g?m.unshift(c):m.push(c),m.warned||(c=void 0===a._maxListeners?d.defaultMaxListeners:a._maxListeners)&&0<c&&m.length>c&&(m.warned=!0,c=Error("Possible EventEmitter memory leak detected. "+m.length+' "'+String(b)+'" listeners added. Use emitter.setMaxListeners() to increase limit.'),c.name="MaxListenersExceededWarning",c.emitter=a,c.type=b,
c.count=m.length,"object"===typeof console&&console.warn&&console.warn("%s: %s",c.name,c.message))):(e[b]=c,++a._eventsCount);return a}function c(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);
default:for(var a=Array(arguments.length),b=0;b<a.length;++b)a[b]=arguments[b];this.listener.apply(this.target,a)}}function g(a,b,d){a={fired:!1,wrapFn:void 0,target:a,type:b,listener:d};b=N.call(c,a);b.listener=d;return a.wrapFn=b}function a(a,b,c){a=a._events;if(!a)return[];b=a[b];if(!b)return[];if("function"===typeof b)return c?[b.listener||b]:[b];if(c)for(c=Array(b.length),a=0;a<c.length;++a)c[a]=b[a].listener||b[a];else c=m(b,b.length);return c}function b(a){var b=this._events;if(b){a=b[a];if("function"===
typeof a)return 1;if(a)return a.length}return 0}function m(a,b){for(var c=Array(b),d=0;d<b;++d)c[d]=a[d];return c}function p(a){var b=function(){};b.prototype=a;return new b}function t(a){var b=[],c;for(c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return c}function n(a){var b=this;return function(){return b.apply(a,arguments)}}var q=Object.create||p,Q=Object.keys||t,N=Function.prototype.bind||n;k.exports=d;d.EventEmitter=d;d.prototype._events=void 0;d.prototype._maxListeners=void 0;
var v=10;try{f={};Object.defineProperty&&Object.defineProperty(f,"x",{value:0});var B=0===f.x}catch(z){B=!1}B?Object.defineProperty(d,"defaultMaxListeners",{enumerable:!0,get:function(){return v},set:function(a){if("number"!==typeof a||0>a||a!==a)throw new TypeError('"defaultMaxListeners" must be a positive number');v=a}}):d.defaultMaxListeners=v;d.prototype.setMaxListeners=function(a){if("number"!==typeof a||0>a||isNaN(a))throw new TypeError('"n" argument must be a positive number');this._maxListeners=
a;return this};d.prototype.getMaxListeners=function(){return void 0===this._maxListeners?d.defaultMaxListeners:this._maxListeners};d.prototype.emit=function(a){var b,c,d;var g="error"===a;if(d=this._events)g=g&&null==d.error;else if(!g)return!1;if(g){1<arguments.length&&(b=arguments[1]);if(b instanceof Error)throw b;d=Error('Unhandled "error" event. ('+b+")");d.context=b;throw d;}b=d[a];if(!b)return!1;d="function"===typeof b;var e=arguments.length;switch(e){case 1:if(d)b.call(this);else for(d=b.length,
b=m(b,d),g=0;g<d;++g)b[g].call(this);break;case 2:g=arguments[1];if(d)b.call(this,g);else for(d=b.length,b=m(b,d),e=0;e<d;++e)b[e].call(this,g);break;case 3:g=arguments[1];e=arguments[2];if(d)b.call(this,g,e);else for(d=b.length,b=m(b,d),c=0;c<d;++c)b[c].call(this,g,e);break;case 4:g=arguments[1];e=arguments[2];c=arguments[3];if(d)b.call(this,g,e,c);else{d=b.length;b=m(b,d);for(var p=0;p<d;++p)b[p].call(this,g,e,c)}break;default:g=Array(e-1);for(c=1;c<e;c++)g[c-1]=arguments[c];if(d)b.apply(this,g);
else for(d=b.length,b=m(b,d),e=0;e<d;++e)b[e].apply(this,g)}return!0};d.prototype.addListener=function(a,b){return e(this,a,b,!1)};d.prototype.on=d.prototype.addListener;d.prototype.prependListener=function(a,b){return e(this,a,b,!0)};d.prototype.once=function(a,b){if("function"!==typeof b)throw new TypeError('"listener" argument must be a function');this.on(a,g(this,a,b));return this};d.prototype.prependOnceListener=function(a,b){if("function"!==typeof b)throw new TypeError('"listener" argument must be a function');
this.prependListener(a,g(this,a,b));return this};d.prototype.removeListener=function(a,b){var c;if("function"!==typeof b)throw new TypeError('"listener" argument must be a function');var d=this._events;if(!d)return this;var g=d[a];if(!g)return this;if(g===b||g.listener===b)0===--this._eventsCount?this._events=q(null):(delete d[a],d.removeListener&&this.emit("removeListener",a,g.listener||b));else if("function"!==typeof g){var e=-1;for(c=g.length-1;0<=c;c--)if(g[c]===b||g[c].listener===b){var m=g[c].listener;
e=c;break}if(0>e)return this;if(0===e)g.shift();else{c=e+1;for(var p=g.length;c<p;e+=1,c+=1)g[e]=g[c];g.pop()}1===g.length&&(d[a]=g[0]);d.removeListener&&this.emit("removeListener",a,m||b)}return this};d.prototype.removeAllListeners=function(a){var b=this._events;if(!b)return this;if(!b.removeListener)return 0===arguments.length?(this._events=q(null),this._eventsCount=0):b[a]&&(0===--this._eventsCount?this._events=q(null):delete b[a]),this;if(0===arguments.length){var c=Q(b);for(b=0;b<c.length;++b){var d=
c[b];"removeListener"!==d&&this.removeAllListeners(d)}this.removeAllListeners("removeListener");this._events=q(null);this._eventsCount=0;return this}c=b[a];if("function"===typeof c)this.removeListener(a,c);else if(c)for(b=c.length-1;0<=b;b--)this.removeListener(a,c[b]);return this};d.prototype.listeners=function(b){return a(this,b,!0)};d.prototype.rawListeners=function(b){return a(this,b,!1)};d.listenerCount=function(a,c){return"function"===typeof a.listenerCount?a.listenerCount(c):b.call(a,c)};d.prototype.listenerCount=
b;d.prototype.eventNames=function(){return 0<this._eventsCount?Reflect.ownKeys(this._events):[]}},{}],6:[function(f,k,h){h.read=function(d,e,c,g,a){var b=8*a-g-1;var m=(1<<b)-1,p=m>>1,t=-7;a=c?a-1:0;var n=c?-1:1,q=d[e+a];a+=n;c=q&(1<<-t)-1;q>>=-t;for(t+=b;0<t;c=256*c+d[e+a],a+=n,t-=8);b=c&(1<<-t)-1;c>>=-t;for(t+=g;0<t;b=256*b+d[e+a],a+=n,t-=8);if(0===c)c=1-p;else{if(c===m)return b?NaN:Infinity*(q?-1:1);b+=Math.pow(2,g);c-=p}return(q?-1:1)*b*Math.pow(2,c-g)};h.write=function(d,e,c,g,a,b){var m,p=8*
b-a-1,t=(1<<p)-1,n=t>>1,q=23===a?Math.pow(2,-24)-Math.pow(2,-77):0;b=g?0:b-1;var f=g?1:-1,N=0>e||0===e&&0>1/e?1:0;e=Math.abs(e);isNaN(e)||Infinity===e?(e=isNaN(e)?1:0,g=t):(g=Math.floor(Math.log(e)/Math.LN2),1>e*(m=Math.pow(2,-g))&&(g--,m*=2),e=1<=g+n?e+q/m:e+q*Math.pow(2,1-n),2<=e*m&&(g++,m/=2),g+n>=t?(e=0,g=t):1<=g+n?(e=(e*m-1)*Math.pow(2,a),g+=n):(e=e*Math.pow(2,n-1)*Math.pow(2,a),g=0));for(;8<=a;d[c+b]=e&255,b+=f,e/=256,a-=8);g=g<<a|e;for(p+=a;0<p;d[c+b]=g&255,b+=f,g/=256,p-=8);d[c+b-f]|=128*
N}},{}],7:[function(f,k,h){k.exports="function"===typeof Object.create?function(d,e){d.super_=e;d.prototype=Object.create(e.prototype,{constructor:{value:d,enumerable:!1,writable:!0,configurable:!0}})}:function(d,e){d.super_=e;var c=function(){};c.prototype=e.prototype;d.prototype=new c;d.prototype.constructor=d}},{}],8:[function(f,k,h){function d(d){return!!d.constructor&&"function"===typeof d.constructor.isBuffer&&d.constructor.isBuffer(d)}k.exports=function(e){return null!=e&&(d(e)||"function"===
typeof e.readFloatLE&&"function"===typeof e.slice&&d(e.slice(0,0))||!!e._isBuffer)}},{}],9:[function(f,k,h){var d={}.toString;k.exports=Array.isArray||function(e){return"[object Array]"==d.call(e)}},{}],10:[function(f,k,h){(function(d){function e(c,g,a,b){if("function"!==typeof c)throw new TypeError('"callback" argument must be a function');var e=arguments.length;switch(e){case 0:case 1:return d.nextTick(c);case 2:return d.nextTick(function(){c.call(null,g)});case 3:return d.nextTick(function(){c.call(null,
g,a)});case 4:return d.nextTick(function(){c.call(null,g,a,b)});default:var p=Array(e-1);for(e=0;e<p.length;)p[e++]=arguments[e];return d.nextTick(function(){c.apply(null,p)})}}!d.version||0===d.version.indexOf("v0.")||0===d.version.indexOf("v1.")&&0!==d.version.indexOf("v1.8.")?k.exports={nextTick:e}:k.exports=d}).call(this,f("_process"))},{_process:11}],11:[function(f,k,h){function d(){throw Error("setTimeout has not been defined");}function e(){throw Error("clearTimeout has not been defined");
}function c(a){if(t===setTimeout)return setTimeout(a,0);if((t===d||!t)&&setTimeout)return t=setTimeout,setTimeout(a,0);try{return t(a,0)}catch(z){try{return t.call(null,a,0)}catch(x){return t.call(this,a,0)}}}function g(a){if(n===clearTimeout)return clearTimeout(a);if((n===e||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(a);try{return n(a)}catch(z){try{return n.call(null,a)}catch(x){return n.call(this,a)}}}function a(){Q&&N&&(Q=!1,N.length?q=N.concat(q):v=-1,q.length&&b())}function b(){if(!Q){var b=
c(a);Q=!0;for(var d=q.length;d;){N=q;for(q=[];++v<d;)N&&N[v].run();v=-1;d=q.length}N=null;Q=!1;g(b)}}function m(a,b){this.fun=a;this.array=b}function p(){}f=k.exports={};try{var t="function"===typeof setTimeout?setTimeout:d}catch(B){t=d}try{var n="function"===typeof clearTimeout?clearTimeout:e}catch(B){n=e}var q=[],Q=!1,N,v=-1;f.nextTick=function(a){var d=Array(arguments.length-1);if(1<arguments.length)for(var g=1;g<arguments.length;g++)d[g-1]=arguments[g];q.push(new m(a,d));1!==q.length||Q||c(b)};
m.prototype.run=function(){this.fun.apply(null,this.array)};f.title="browser";f.browser=!0;f.env={};f.argv=[];f.version="";f.versions={};f.on=p;f.addListener=p;f.once=p;f.off=p;f.removeListener=p;f.removeAllListeners=p;f.emit=p;f.prependListener=p;f.prependOnceListener=p;f.listeners=function(a){return[]};f.binding=function(a){throw Error("process.binding is not supported");};f.cwd=function(){return"/"};f.chdir=function(a){throw Error("process.chdir is not supported");};f.umask=function(){return 0}},
{}],12:[function(f,k,h){k.exports=f("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":13}],13:[function(f,k,h){function d(c){if(!(this instanceof d))return new d(c);a.call(this,c);b.call(this,c);c&&!1===c.readable&&(this.readable=!1);c&&!1===c.writable&&(this.writable=!1);this.allowHalfOpen=!0;c&&!1===c.allowHalfOpen&&(this.allowHalfOpen=!1);this.once("end",e)}function e(){this.allowHalfOpen||this._writableState.ended||g.nextTick(c,this)}function c(a){a.end()}var g=f("process-nextick-args");
h=Object.keys||function(a){var b=[],c;for(c in a)b.push(c);return b};k.exports=d;k=f("core-util-is");k.inherits=f("inherits");var a=f("./_stream_readable"),b=f("./_stream_writable");k.inherits(d,a);f=h(b.prototype);for(k=0;k<f.length;k++)h=f[k],d.prototype[h]||(d.prototype[h]=b.prototype[h]);Object.defineProperty(d.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(d.prototype,"destroyed",{get:function(){return void 0===
this._readableState||void 0===this._writableState?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(a){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=a,this._writableState.destroyed=a)}});d.prototype._destroy=function(a,b){this.push(null);this.end();g.nextTick(b,a)}},{"./_stream_readable":15,"./_stream_writable":17,"core-util-is":4,inherits:7,"process-nextick-args":10}],14:[function(f,k,h){function d(c){if(!(this instanceof d))return new d(c);
e.call(this,c)}k.exports=d;var e=f("./_stream_transform");k=f("core-util-is");k.inherits=f("inherits");k.inherits(d,e);d.prototype._transform=function(c,d,a){a(null,c)}},{"./_stream_transform":16,"core-util-is":4,inherits:7}],15:[function(f,k,h){(function(d,e){function c(a,b,c){if("function"===typeof a.prependListener)return a.prependListener(b,c);if(a._events&&a._events[b])C(a._events[b])?a._events[b].unshift(c):a._events[b]=[c,a._events[b]];else a.on(b,c)}function g(a,b){A=A||f("./_stream_duplex");
a=a||{};var c=b instanceof A;this.objectMode=!!a.objectMode;c&&(this.objectMode=this.objectMode||!!a.readableObjectMode);var d=a.highWaterMark,g=a.readableHighWaterMark,e=this.objectMode?16:16384;this.highWaterMark=d||0===d?d:c&&(g||0===g)?g:e;this.highWaterMark=Math.floor(this.highWaterMark);this.buffer=new L;this.length=0;this.pipes=null;this.pipesCount=0;this.flowing=null;this.reading=this.endEmitted=this.ended=!1;this.sync=!0;this.destroyed=this.resumeScheduled=this.readableListening=this.emittedReadable=
this.needReadable=!1;this.defaultEncoding=a.defaultEncoding||"utf8";this.awaitDrain=0;this.readingMore=!1;this.encoding=this.decoder=null;a.encoding&&(w||(w=f("string_decoder/").StringDecoder),this.decoder=new w(a.encoding),this.encoding=a.encoding)}function a(b){A=A||f("./_stream_duplex");if(!(this instanceof a))return new a(b);this._readableState=new g(b,this);this.readable=!0;b&&("function"===typeof b.read&&(this._read=b.read),"function"===typeof b.destroy&&(this._destroy=b.destroy));E.call(this)}
function b(a,b,c,d,g){var e=a._readableState;if(null===b)e.reading=!1,e.ended||(e.decoder&&(b=e.decoder.end())&&b.length&&(e.buffer.push(b),e.length+=e.objectMode?1:b.length),e.ended=!0,t(a));else{if(!g){g=b;var l;K.isBuffer(g)||g instanceof D||"string"===typeof g||void 0===g||e.objectMode||(l=new TypeError("Invalid non-string/buffer chunk"));var p=l}p?a.emit("error",p):e.objectMode||b&&0<b.length?("string"===typeof b||e.objectMode||Object.getPrototypeOf(b)===K.prototype||(b=K.from(b)),d?e.endEmitted?
a.emit("error",Error("stream.unshift() after end event")):m(a,e,b,!0):e.ended?a.emit("error",Error("stream.push() after EOF")):(e.reading=!1,e.decoder&&!c?(b=e.decoder.write(b),e.objectMode||0!==b.length?m(a,e,b,!1):e.readingMore||(e.readingMore=!0,G.nextTick(q,a,e))):m(a,e,b,!1))):d||(e.reading=!1)}return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}function m(a,b,c,d){b.flowing&&0===b.length&&!b.sync?(a.emit("data",c),a.read(0)):(b.length+=b.objectMode?1:c.length,d?b.buffer.unshift(c):
b.buffer.push(c),b.needReadable&&t(a));b.readingMore||(b.readingMore=!0,G.nextTick(q,a,b))}function p(a,b){if(0>=a||0===b.length&&b.ended)return 0;if(b.objectMode)return 1;if(a!==a)return b.flowing&&b.length?b.buffer.head.data.length:b.length;if(a>b.highWaterMark){var c=a;8388608<=c?c=8388608:(c--,c|=c>>>1,c|=c>>>2,c|=c>>>4,c|=c>>>8,c|=c>>>16,c++);b.highWaterMark=c}return a<=b.length?a:b.ended?b.length:(b.needReadable=!0,0)}function t(a){var b=a._readableState;b.needReadable=!1;b.emittedReadable||
(y("emitReadable",b.flowing),b.emittedReadable=!0,b.sync?G.nextTick(n,a):n(a))}function n(a){y("emit readable");a.emit("readable");h(a)}function q(a,b){for(var c=b.length;!b.reading&&!b.flowing&&!b.ended&&b.length<b.highWaterMark&&(y("maybeReadMore read 0"),a.read(0),c!==b.length);)c=b.length;b.readingMore=!1}function Q(a){return function(){var b=a._readableState;y("pipeOnDrain",b.awaitDrain);b.awaitDrain&&b.awaitDrain--;0===b.awaitDrain&&a.listeners("data").length&&(b.flowing=!0,h(a))}}function N(a){y("readable nexttick read 0");
a.read(0)}function v(a,b){b.reading||(y("resume read 0"),a.read(0));b.resumeScheduled=!1;b.awaitDrain=0;a.emit("resume");h(a);b.flowing&&!b.reading&&a.read(0)}function h(a){var b=a._readableState;for(y("flow",b.flowing);b.flowing&&null!==a.read(););}function z(a,b){if(0===b.length)return null;if(b.objectMode)var c=b.buffer.shift();else if(!a||a>=b.length)c=b.decoder?b.buffer.join(""):1===b.buffer.length?b.buffer.head.data:b.buffer.concat(b.length),b.buffer.clear();else{c=b.buffer;var d=b.decoder;
if(a<c.head.data.length)d=c.head.data.slice(0,a),c.head.data=c.head.data.slice(a);else{if(a===c.head.data.length)c=c.shift();else if(d){var g=c.head,e=1,m=g.data;for(d=a-m.length;g=g.next;){var p=g.data,l=d>p.length?p.length:d;m=l===p.length?m+p:m+p.slice(0,d);d-=l;if(0===d){l===p.length?(++e,c.head=g.next?g.next:c.tail=null):(c.head=g,g.data=p.slice(l));break}++e}c.length-=e;c=m}else{d=a;g=K.allocUnsafe(d);e=c.head;m=1;e.data.copy(g);for(d-=e.data.length;e=e.next;){p=e.data;l=d>p.length?p.length:
d;p.copy(g,g.length-d,0,l);d-=l;if(0===d){l===p.length?(++m,c.head=e.next?e.next:c.tail=null):(c.head=e,e.data=p.slice(l));break}++m}c.length-=m;c=g}d=c}c=d}return c}function x(a){var b=a._readableState;if(0<b.length)throw Error('"endReadable()" called on non-empty stream');b.endEmitted||(b.ended=!0,G.nextTick(H,b,a))}function H(a,b){a.endEmitted||0!==a.length||(a.endEmitted=!0,b.readable=!1,b.emit("end"))}function F(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}var G=f("process-nextick-args");
k.exports=a;var C=f("isarray"),A;a.ReadableState=g;f("events");var E=f("./internal/streams/stream"),K=f("safe-buffer").Buffer,D=e.Uint8Array||function(){},I=f("core-util-is");I.inherits=f("inherits");var J=f("util"),y=void 0;y=J&&J.debuglog?J.debuglog("stream"):function(){};var L=f("./internal/streams/BufferList");J=f("./internal/streams/destroy");var w;I.inherits(a,E);var M=["error","close","destroy","pause","resume"];Object.defineProperty(a.prototype,"destroyed",{get:function(){return void 0===
this._readableState?!1:this._readableState.destroyed},set:function(a){this._readableState&&(this._readableState.destroyed=a)}});a.prototype.destroy=J.destroy;a.prototype._undestroy=J.undestroy;a.prototype._destroy=function(a,b){this.push(null);b(a)};a.prototype.push=function(a,c){var d=this._readableState;if(d.objectMode)var g=!0;else"string"===typeof a&&(c=c||d.defaultEncoding,c!==d.encoding&&(a=K.from(a,c),c=""),g=!0);return b(this,a,c,!1,g)};a.prototype.unshift=function(a){return b(this,a,null,
!0,!1)};a.prototype.isPaused=function(){return!1===this._readableState.flowing};a.prototype.setEncoding=function(a){w||(w=f("string_decoder/").StringDecoder);this._readableState.decoder=new w(a);this._readableState.encoding=a;return this};a.prototype.read=function(a){y("read",a);a=parseInt(a,10);var b=this._readableState,c=a;0!==a&&(b.emittedReadable=!1);if(0===a&&b.needReadable&&(b.length>=b.highWaterMark||b.ended))return y("read: emitReadable",b.length,b.ended),0===b.length&&b.ended?x(this):t(this),
null;a=p(a,b);if(0===a&&b.ended)return 0===b.length&&x(this),null;var d=b.needReadable;y("need readable",d);if(0===b.length||b.length-a<b.highWaterMark)d=!0,y("length less than watermark",d);b.ended||b.reading?y("reading or ended",!1):d&&(y("do read"),b.reading=!0,b.sync=!0,0===b.length&&(b.needReadable=!0),this._read(b.highWaterMark),b.sync=!1,b.reading||(a=p(c,b)));d=0<a?z(a,b):null;null===d?(b.needReadable=!0,a=0):b.length-=a;0===b.length&&(b.ended||(b.needReadable=!0),c!==a&&b.ended&&x(this));
null!==d&&this.emit("data",d);return d};a.prototype._read=function(a){this.emit("error",Error("_read() is not implemented"))};a.prototype.pipe=function(a,b){function g(b,c){y("onunpipe");b===f&&c&&!1===c.hasUnpiped&&(c.hasUnpiped=!0,y("cleanup"),a.removeListener("close",t),a.removeListener("finish",n),a.removeListener("drain",N),a.removeListener("error",p),a.removeListener("unpipe",g),f.removeListener("end",e),f.removeListener("end",q),f.removeListener("data",m),h=!0,!v.awaitDrain||a._writableState&&
!a._writableState.needDrain||N())}function e(){y("onend");a.end()}function m(b){y("ondata");A=!1;!1!==a.write(b)||A||((1===v.pipesCount&&v.pipes===a||1<v.pipesCount&&-1!==F(v.pipes,a))&&!h&&(y("false write response, pause",f._readableState.awaitDrain),f._readableState.awaitDrain++,A=!0),f.pause())}function p(b){y("onerror",b);q();a.removeListener("error",p);0===a.listeners("error").length&&a.emit("error",b)}function t(){a.removeListener("finish",n);q()}function n(){y("onfinish");a.removeListener("close",
t);q()}function q(){y("unpipe");f.unpipe(a)}var f=this,v=this._readableState;switch(v.pipesCount){case 0:v.pipes=a;break;case 1:v.pipes=[v.pipes,a];break;default:v.pipes.push(a)}v.pipesCount+=1;y("pipe count=%d opts=%j",v.pipesCount,b);var l=b&&!1===b.end||a===d.stdout||a===d.stderr?q:e;if(v.endEmitted)G.nextTick(l);else f.once("end",l);a.on("unpipe",g);var N=Q(f);a.on("drain",N);var h=!1,A=!1;f.on("data",m);c(a,"error",p);a.once("close",t);a.once("finish",n);a.emit("pipe",f);v.flowing||(y("pipe resume"),
f.resume());return a};a.prototype.unpipe=function(a){var b=this._readableState,c={hasUnpiped:!1};if(0===b.pipesCount)return this;if(1===b.pipesCount){if(a&&a!==b.pipes)return this;a||(a=b.pipes);b.pipes=null;b.pipesCount=0;b.flowing=!1;a&&a.emit("unpipe",this,c);return this}if(!a){a=b.pipes;var d=b.pipesCount;b.pipes=null;b.pipesCount=0;b.flowing=!1;for(b=0;b<d;b++)a[b].emit("unpipe",this,c);return this}d=F(b.pipes,a);if(-1===d)return this;b.pipes.splice(d,1);--b.pipesCount;1===b.pipesCount&&(b.pipes=
b.pipes[0]);a.emit("unpipe",this,c);return this};a.prototype.on=function(a,b){var c=E.prototype.on.call(this,a,b);if("data"===a)!1!==this._readableState.flowing&&this.resume();else if("readable"===a){var d=this._readableState;d.endEmitted||d.readableListening||(d.readableListening=d.needReadable=!0,d.emittedReadable=!1,d.reading?d.length&&t(this):G.nextTick(N,this))}return c};a.prototype.addListener=a.prototype.on;a.prototype.resume=function(){var a=this._readableState;a.flowing||(y("resume"),a.flowing=
!0,a.resumeScheduled||(a.resumeScheduled=!0,G.nextTick(v,this,a)));return this};a.prototype.pause=function(){y("call pause flowing=%j",this._readableState.flowing);!1!==this._readableState.flowing&&(y("pause"),this._readableState.flowing=!1,this.emit("pause"));return this};a.prototype.wrap=function(a){var b=this,c=this._readableState,d=!1;a.on("end",function(){y("wrapped end");if(c.decoder&&!c.ended){var a=c.decoder.end();a&&a.length&&b.push(a)}b.push(null)});a.on("data",function(g){y("wrapped data");
c.decoder&&(g=c.decoder.write(g));c.objectMode&&(null===g||void 0===g)||!(c.objectMode||g&&g.length)||b.push(g)||(d=!0,a.pause())});for(var g in a)void 0===this[g]&&"function"===typeof a[g]&&(this[g]=function(b){return function(){return a[b].apply(a,arguments)}}(g));for(g=0;g<M.length;g++)a.on(M[g],this.emit.bind(this,M[g]));this._read=function(b){y("wrapped _read",b);d&&(d=!1,a.resume())};return this};Object.defineProperty(a.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});
a._fromList=z}).call(this,f("_process"),"undefined"!==typeof global?global:"undefined"!==typeof self?self:"undefined"!==typeof window?window:{})},{"./_stream_duplex":13,"./internal/streams/BufferList":18,"./internal/streams/destroy":19,"./internal/streams/stream":20,_process:11,"core-util-is":4,events:5,inherits:7,isarray:9,"process-nextick-args":10,"safe-buffer":25,"string_decoder/":27,util:2}],16:[function(f,k,h){function d(a,c){var b=this._transformState;b.transforming=!1;var d=b.writecb;if(!d)return this.emit("error",
Error("write callback called multiple times"));b.writechunk=null;b.writecb=null;null!=c&&this.push(c);d(a);b=this._readableState;b.reading=!1;(b.needReadable||b.length<b.highWaterMark)&&this._read(b.highWaterMark)}function e(b){if(!(this instanceof e))return new e(b);a.call(this,b);this._transformState={afterTransform:d.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null};this._readableState.needReadable=!0;this._readableState.sync=!1;b&&("function"===typeof b.transform&&
(this._transform=b.transform),"function"===typeof b.flush&&(this._flush=b.flush));this.on("prefinish",c)}function c(){var a=this;"function"===typeof this._flush?this._flush(function(b,c){g(a,b,c)}):g(this,null,null)}function g(a,c,d){if(c)return a.emit("error",c);null!=d&&a.push(d);if(a._writableState.length)throw Error("Calling transform done when ws.length != 0");if(a._transformState.transforming)throw Error("Calling transform done when still transforming");return a.push(null)}k.exports=e;var a=
f("./_stream_duplex");k=f("core-util-is");k.inherits=f("inherits");k.inherits(e,a);e.prototype.push=function(b,c){this._transformState.needTransform=!1;return a.prototype.push.call(this,b,c)};e.prototype._transform=function(a,c,d){throw Error("_transform() is not implemented");};e.prototype._write=function(a,c,d){var b=this._transformState;b.writecb=d;b.writechunk=a;b.writeencoding=c;b.transforming||(a=this._readableState,(b.needTransform||a.needReadable||a.length<a.highWaterMark)&&this._read(a.highWaterMark))};
e.prototype._read=function(a){a=this._transformState;null!==a.writechunk&&a.writecb&&!a.transforming?(a.transforming=!0,this._transform(a.writechunk,a.writeencoding,a.afterTransform)):a.needTransform=!0};e.prototype._destroy=function(b,c){var d=this;a.prototype._destroy.call(this,b,function(a){c(a);d.emit("close")})}},{"./_stream_duplex":13,"core-util-is":4,inherits:7}],17:[function(f,k,h){(function(d,e,c){function g(a){var b=this;this.entry=this.next=null;this.finish=function(){var c=b.entry;for(b.entry=
null;c;){var d=c.callback;a.pendingcb--;d(void 0);c=c.next}a.corkedRequestsFree?a.corkedRequestsFree.next=b:a.corkedRequestsFree=b}}function a(){}function b(a,b){z=z||f("./_stream_duplex");a=a||{};var c=b instanceof z;this.objectMode=!!a.objectMode;c&&(this.objectMode=this.objectMode||!!a.writableObjectMode);var d=a.highWaterMark,e=a.writableHighWaterMark,m=this.objectMode?16:16384;this.highWaterMark=d||0===d?d:c&&(e||0===e)?e:m;this.highWaterMark=Math.floor(this.highWaterMark);this.destroyed=this.finished=
this.ended=this.ending=this.needDrain=this.finalCalled=!1;this.decodeStrings=!1!==a.decodeStrings;this.defaultEncoding=a.defaultEncoding||"utf8";this.length=0;this.writing=!1;this.corked=0;this.sync=!0;this.bufferProcessing=!1;this.onwrite=function(a){var c=b._writableState,d=c.sync,g=c.writecb;c.writing=!1;c.writecb=null;c.length-=c.writelen;c.writelen=0;a?(--c.pendingcb,d?(v.nextTick(g,a),v.nextTick(N,b,c),b._writableState.errorEmitted=!0,b.emit("error",a)):(g(a),b._writableState.errorEmitted=!0,
b.emit("error",a),N(b,c))):((a=q(c))||c.corked||c.bufferProcessing||!c.bufferedRequest||n(b,c),d?h(t,b,c,a,g):t(b,c,a,g))};this.writecb=null;this.writelen=0;this.lastBufferedRequest=this.bufferedRequest=null;this.pendingcb=0;this.errorEmitted=this.prefinished=!1;this.bufferedRequestCount=0;this.corkedRequestsFree=new g(this)}function m(a){z=z||f("./_stream_duplex");if(!(C.call(m,this)||this instanceof z))return new m(a);this._writableState=new b(a,this);this.writable=!0;a&&("function"===typeof a.write&&
(this._write=a.write),"function"===typeof a.writev&&(this._writev=a.writev),"function"===typeof a.destroy&&(this._destroy=a.destroy),"function"===typeof a["final"]&&(this._final=a["final"]));H.call(this)}function p(a,b,c,d,g,e,m){b.writelen=d;b.writecb=m;b.writing=!0;b.sync=!0;c?a._writev(g,b.onwrite):a._write(g,e,b.onwrite);b.sync=!1}function t(a,b,c,d){!c&&0===b.length&&b.needDrain&&(b.needDrain=!1,a.emit("drain"));b.pendingcb--;d();N(a,b)}function n(a,b){b.bufferProcessing=!0;var c=b.bufferedRequest;
if(a._writev&&c&&c.next){var d=Array(b.bufferedRequestCount),e=b.corkedRequestsFree;e.entry=c;for(var m=0,n=!0;c;)d[m]=c,c.isBuf||(n=!1),c=c.next,m+=1;d.allBuffers=n;p(a,b,!0,b.length,d,"",e.finish);b.pendingcb++;b.lastBufferedRequest=null;e.next?(b.corkedRequestsFree=e.next,e.next=null):b.corkedRequestsFree=new g(b);b.bufferedRequestCount=0}else{for(;c&&(d=c.chunk,p(a,b,!1,b.objectMode?1:d.length,d,c.encoding,c.callback),c=c.next,b.bufferedRequestCount--,!b.writing););null===c&&(b.lastBufferedRequest=
null)}b.bufferedRequest=c;b.bufferProcessing=!1}function q(a){return a.ending&&0===a.length&&null===a.bufferedRequest&&!a.finished&&!a.writing}function Q(a,b){a._final(function(c){b.pendingcb--;c&&a.emit("error",c);b.prefinished=!0;a.emit("prefinish");N(a,b)})}function N(a,b){var c=q(b);c&&(b.prefinished||b.finalCalled||("function"===typeof a._final?(b.pendingcb++,b.finalCalled=!0,v.nextTick(Q,a,b)):(b.prefinished=!0,a.emit("prefinish"))),0===b.pendingcb&&(b.finished=!0,a.emit("finish")));return c}
var v=f("process-nextick-args");k.exports=m;var h=!d.browser&&-1<["v0.10","v0.9."].indexOf(d.version.slice(0,5))?c:v.nextTick,z;m.WritableState=b;d=f("core-util-is");d.inherits=f("inherits");var x={deprecate:f("util-deprecate")},H=f("./internal/streams/stream"),F=f("safe-buffer").Buffer,G=e.Uint8Array||function(){};e=f("./internal/streams/destroy");d.inherits(m,H);b.prototype.getBuffer=function(){for(var a=this.bufferedRequest,b=[];a;)b.push(a),a=a.next;return b};(function(){try{Object.defineProperty(b.prototype,
"buffer",{get:x.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(A){}})();$jscomp.initSymbol();$jscomp.initSymbol();$jscomp.initSymbol();if("function"===typeof Symbol&&Symbol.hasInstance&&"function"===typeof Function.prototype[Symbol.hasInstance]){$jscomp.initSymbol();var C=Function.prototype[Symbol.hasInstance];$jscomp.initSymbol();Object.defineProperty(m,Symbol.hasInstance,{value:function(a){return C.call(this,
a)?!0:this!==m?!1:a&&a._writableState instanceof b}})}else C=function(a){return a instanceof this};m.prototype.pipe=function(){this.emit("error",Error("Cannot pipe, not readable"))};m.prototype.write=function(b,c,d){var g=this._writableState,e=!1,m;if(m=!g.objectMode)m=b,m=F.isBuffer(m)||m instanceof G;m&&!F.isBuffer(b)&&(b=F.from(b));"function"===typeof c&&(d=c,c=null);m?c="buffer":c||(c=g.defaultEncoding);"function"!==typeof d&&(d=a);if(g.ended)g=d,d=Error("write after end"),this.emit("error",d),
v.nextTick(g,d);else{var n;if(!(n=m)){n=b;var q=d,t=!0,f=!1;null===n?f=new TypeError("May not write null values to stream"):"string"===typeof n||void 0===n||g.objectMode||(f=new TypeError("Invalid non-string/buffer chunk"));f&&(this.emit("error",f),v.nextTick(q,f),t=!1);n=t}n&&(g.pendingcb++,e=m,e||(m=b,g.objectMode||!1===g.decodeStrings||"string"!==typeof m||(m=F.from(m,c)),b!==m&&(e=!0,c="buffer",b=m)),n=g.objectMode?1:b.length,g.length+=n,m=g.length<g.highWaterMark,m||(g.needDrain=!0),g.writing||
g.corked?(n=g.lastBufferedRequest,g.lastBufferedRequest={chunk:b,encoding:c,isBuf:e,callback:d,next:null},n?n.next=g.lastBufferedRequest:g.bufferedRequest=g.lastBufferedRequest,g.bufferedRequestCount+=1):p(this,g,!1,n,b,c,d),e=m)}return e};m.prototype.cork=function(){this._writableState.corked++};m.prototype.uncork=function(){var a=this._writableState;a.corked&&(a.corked--,a.writing||a.corked||a.finished||a.bufferProcessing||!a.bufferedRequest||n(this,a))};m.prototype.setDefaultEncoding=function(a){"string"===
typeof a&&(a=a.toLowerCase());if(!(-1<"hex utf8 utf-8 ascii binary base64 ucs2 ucs-2 utf16le utf-16le raw".split(" ").indexOf((a+"").toLowerCase())))throw new TypeError("Unknown encoding: "+a);this._writableState.defaultEncoding=a;return this};Object.defineProperty(m.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});m.prototype._write=function(a,b,c){c(Error("_write() is not implemented"))};m.prototype._writev=null;m.prototype.end=function(a,
b,c){var d=this._writableState;"function"===typeof a?(c=a,b=a=null):"function"===typeof b&&(c=b,b=null);null!==a&&void 0!==a&&this.write(a,b);d.corked&&(d.corked=1,this.uncork());if(!d.ending&&!d.finished){a=c;d.ending=!0;N(this,d);if(a)if(d.finished)v.nextTick(a);else this.once("finish",a);d.ended=!0;this.writable=!1}};Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0===this._writableState?!1:this._writableState.destroyed},set:function(a){this._writableState&&(this._writableState.destroyed=
a)}});m.prototype.destroy=e.destroy;m.prototype._undestroy=e.undestroy;m.prototype._destroy=function(a,b){this.end();b(a)}}).call(this,f("_process"),"undefined"!==typeof global?global:"undefined"!==typeof self?self:"undefined"!==typeof window?window:{},f("timers").setImmediate)},{"./_stream_duplex":13,"./internal/streams/destroy":19,"./internal/streams/stream":20,_process:11,"core-util-is":4,inherits:7,"process-nextick-args":10,"safe-buffer":25,timers:28,"util-deprecate":29}],18:[function(f,k,h){var d=
f("safe-buffer").Buffer,e=f("util");k.exports=function(){function c(){if(!(this instanceof c))throw new TypeError("Cannot call a class as a function");this.tail=this.head=null;this.length=0}c.prototype.push=function(c){c={data:c,next:null};0<this.length?this.tail.next=c:this.head=c;this.tail=c;++this.length};c.prototype.unshift=function(c){c={data:c,next:this.head};0===this.length&&(this.tail=c);this.head=c;++this.length};c.prototype.shift=function(){if(0!==this.length){var c=this.head.data;this.head=
1===this.length?this.tail=null:this.head.next;--this.length;return c}};c.prototype.clear=function(){this.head=this.tail=null;this.length=0};c.prototype.join=function(c){if(0===this.length)return"";for(var a=this.head,b=""+a.data;a=a.next;)b+=c+a.data;return b};c.prototype.concat=function(c){if(0===this.length)return d.alloc(0);if(1===this.length)return this.head.data;c=d.allocUnsafe(c>>>0);for(var a=this.head,b=0;a;)a.data.copy(c,b),b+=a.data.length,a=a.next;return c};return c}();e&&e.inspect&&e.inspect.custom&&
(k.exports.prototype[e.inspect.custom]=function(){var c=e.inspect({length:this.length});return this.constructor.name+" "+c})},{"safe-buffer":25,util:2}],19:[function(f,k,h){function d(c,d){c.emit("error",d)}var e=f("process-nextick-args");k.exports={destroy:function(c,g){var a=this,b=this._writableState&&this._writableState.destroyed;if(this._readableState&&this._readableState.destroyed||b)return g?g(c):!c||this._writableState&&this._writableState.errorEmitted||e.nextTick(d,this,c),this;this._readableState&&
(this._readableState.destroyed=!0);this._writableState&&(this._writableState.destroyed=!0);this._destroy(c||null,function(b){!g&&b?(e.nextTick(d,a,b),a._writableState&&(a._writableState.errorEmitted=!0)):g&&g(b)});return this},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1);this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=
!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{"process-nextick-args":10}],20:[function(f,k,h){k.exports=f("events").EventEmitter},{events:5}],21:[function(f,k,h){k.exports=f("./readable").PassThrough},{"./readable":22}],22:[function(f,k,h){h=k.exports=f("./lib/_stream_readable.js");h.Stream=h;h.Readable=h;h.Writable=f("./lib/_stream_writable.js");h.Duplex=f("./lib/_stream_duplex.js");h.Transform=f("./lib/_stream_transform.js");h.PassThrough=f("./lib/_stream_passthrough.js")},
{"./lib/_stream_duplex.js":13,"./lib/_stream_passthrough.js":14,"./lib/_stream_readable.js":15,"./lib/_stream_transform.js":16,"./lib/_stream_writable.js":17}],23:[function(f,k,h){k.exports=f("./readable").Transform},{"./readable":22}],24:[function(f,k,h){k.exports=f("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":17}],25:[function(f,k,h){function d(a,b){for(var c in a)b[c]=a[c]}function e(a,b,c){return g(a,b,c)}var c=f("buffer"),g=c.Buffer;g.from&&g.alloc&&g.allocUnsafe&&g.allocUnsafeSlow?
k.exports=c:(d(c,h),h.Buffer=e);d(g,e);e.from=function(a,b,c){if("number"===typeof a)throw new TypeError("Argument must not be a number");return g(a,b,c)};e.alloc=function(a,b,c){if("number"!==typeof a)throw new TypeError("Argument must be a number");a=g(a);void 0!==b?"string"===typeof c?a.fill(b,c):a.fill(b):a.fill(0);return a};e.allocUnsafe=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");return g(a)};e.allocUnsafeSlow=function(a){if("number"!==typeof a)throw new TypeError("Argument must be a number");
return c.SlowBuffer(a)}},{buffer:3}],26:[function(f,k,h){function d(){e.call(this)}k.exports=d;var e=f("events").EventEmitter;f("inherits")(d,e);d.Readable=f("readable-stream/readable.js");d.Writable=f("readable-stream/writable.js");d.Duplex=f("readable-stream/duplex.js");d.Transform=f("readable-stream/transform.js");d.PassThrough=f("readable-stream/passthrough.js");d.Stream=d;d.prototype.pipe=function(c,d){function a(a){c.writable&&!1===c.write(a)&&q.pause&&q.pause()}function b(){q.readable&&q.resume&&
q.resume()}function g(){f||(f=!0,c.end())}function p(){f||(f=!0,"function"===typeof c.destroy&&c.destroy())}function t(a){n();if(0===e.listenerCount(this,"error"))throw a;}function n(){q.removeListener("data",a);c.removeListener("drain",b);q.removeListener("end",g);q.removeListener("close",p);q.removeListener("error",t);c.removeListener("error",t);q.removeListener("end",n);q.removeListener("close",n);c.removeListener("close",n)}var q=this;q.on("data",a);c.on("drain",b);c._isStdio||d&&!1===d.end||
(q.on("end",g),q.on("close",p));var f=!1;q.on("error",t);c.on("error",t);q.on("end",n);q.on("close",n);c.on("close",n);c.emit("pipe",q);return c}},{events:5,inherits:7,"readable-stream/duplex.js":12,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],27:[function(f,k,h){function d(a){if(!a)return"utf8";for(var b;;)switch(a){case "utf8":case "utf-8":return"utf8";case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return"utf16le";
case "latin1":case "binary":return"latin1";case "base64":case "ascii":case "hex":return a;default:if(b)return;a=(""+a).toLowerCase();b=!0}}function e(c){var g=d(c);if("string"!==typeof g&&(Q.isEncoding===N||!N(c)))throw Error("Unknown encoding: "+c);this.encoding=g||c;switch(this.encoding){case "utf16le":this.text=b;this.end=m;c=4;break;case "utf8":this.fillLast=a;c=4;break;case "base64":this.text=p;this.end=t;c=3;break;default:this.write=n;this.end=q;return}this.lastTotal=this.lastNeed=0;this.lastChar=
Q.allocUnsafe(c)}function c(a){return 127>=a?0:6===a>>5?2:14===a>>4?3:30===a>>3?4:2===a>>6?-1:-2}function g(a,b,d){var g=b.length-1;if(g<d)return 0;var e=c(b[g]);if(0<=e)return 0<e&&(a.lastNeed=e-1),e;if(--g<d||-2===e)return 0;e=c(b[g]);if(0<=e)return 0<e&&(a.lastNeed=e-2),e;if(--g<d||-2===e)return 0;e=c(b[g]);return 0<=e?(0<e&&(2===e?e=0:a.lastNeed=e-3),e):0}function a(a){var b=this.lastTotal-this.lastNeed;a:if(128!==(a[0]&192)){this.lastNeed=0;var c="\ufffd"}else{if(1<this.lastNeed&&1<a.length){if(128!==
(a[1]&192)){this.lastNeed=1;c="\ufffd";break a}if(2<this.lastNeed&&2<a.length&&128!==(a[2]&192)){this.lastNeed=2;c="\ufffd";break a}}c=void 0}if(void 0!==c)return c;if(this.lastNeed<=a.length)return a.copy(this.lastChar,b,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);a.copy(this.lastChar,b,0,a.length);this.lastNeed-=a.length}function b(a,b){if(0===(a.length-b)%2){var c=a.toString("utf16le",b);if(c){var d=c.charCodeAt(c.length-1);if(55296<=d&&56319>=d)return this.lastNeed=
2,this.lastTotal=4,this.lastChar[0]=a[a.length-2],this.lastChar[1]=a[a.length-1],c.slice(0,-1)}return c}this.lastNeed=1;this.lastTotal=2;this.lastChar[0]=a[a.length-1];return a.toString("utf16le",b,a.length-1)}function m(a){a=a&&a.length?this.write(a):"";return this.lastNeed?a+this.lastChar.toString("utf16le",0,this.lastTotal-this.lastNeed):a}function p(a,b){var c=(a.length-b)%3;if(0===c)return a.toString("base64",b);this.lastNeed=3-c;this.lastTotal=3;1===c?this.lastChar[0]=a[a.length-1]:(this.lastChar[0]=
a[a.length-2],this.lastChar[1]=a[a.length-1]);return a.toString("base64",b,a.length-c)}function t(a){a=a&&a.length?this.write(a):"";return this.lastNeed?a+this.lastChar.toString("base64",0,3-this.lastNeed):a}function n(a){return a.toString(this.encoding)}function q(a){return a&&a.length?this.write(a):""}var Q=f("safe-buffer").Buffer,N=Q.isEncoding||function(a){a=""+a;switch(a&&a.toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":case "raw":return!0;
default:return!1}};h.StringDecoder=e;e.prototype.write=function(a){if(0===a.length)return"";if(this.lastNeed){var b=this.fillLast(a);if(void 0===b)return"";var c=this.lastNeed;this.lastNeed=0}else c=0;return c<a.length?b?b+this.text(a,c):this.text(a,c):b||""};e.prototype.end=function(a){a=a&&a.length?this.write(a):"";return this.lastNeed?a+"\ufffd":a};e.prototype.text=function(a,b){var c=g(this,a,b);if(!this.lastNeed)return a.toString("utf8",b);this.lastTotal=c;c=a.length-(c-this.lastNeed);a.copy(this.lastChar,
0,c);return a.toString("utf8",b,c)};e.prototype.fillLast=function(a){if(this.lastNeed<=a.length)return a.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);a.copy(this.lastChar,this.lastTotal-this.lastNeed,0,a.length);this.lastNeed-=a.length}},{"safe-buffer":25}],28:[function(f,k,h){(function(d,e){function c(a,b){this._id=a;this._clearFn=b}var g=f("process/browser.js").nextTick,a=Function.prototype.apply,b=Array.prototype.slice,
m={},p=0;h.setTimeout=function(){return new c(a.call(setTimeout,window,arguments),clearTimeout)};h.setInterval=function(){return new c(a.call(setInterval,window,arguments),clearInterval)};h.clearTimeout=h.clearInterval=function(a){a.close()};c.prototype.unref=c.prototype.ref=function(){};c.prototype.close=function(){this._clearFn.call(window,this._id)};h.enroll=function(a,b){clearTimeout(a._idleTimeoutId);a._idleTimeout=b};h.unenroll=function(a){clearTimeout(a._idleTimeoutId);a._idleTimeout=-1};h._unrefActive=
h.active=function(a){clearTimeout(a._idleTimeoutId);var b=a._idleTimeout;0<=b&&(a._idleTimeoutId=setTimeout(function(){a._onTimeout&&a._onTimeout()},b))};h.setImmediate="function"===typeof d?d:function(a){var c=p++,d=2>arguments.length?!1:b.call(arguments,1);m[c]=!0;g(function(){m[c]&&(d?a.apply(null,d):a.call(null),h.clearImmediate(c))});return c};h.clearImmediate="function"===typeof e?e:function(a){delete m[a]}}).call(this,f("timers").setImmediate,f("timers").clearImmediate)},{"process/browser.js":11,
timers:28}],29:[function(f,k,h){(function(d){function e(c){try{if(!d.localStorage)return!1}catch(g){return!1}c=d.localStorage[c];return null==c?!1:"true"===String(c).toLowerCase()}k.exports=function(c,d){if(e("noDeprecation"))return c;var a=!1;return function(){if(!a){if(e("throwDeprecation"))throw Error(d);e("traceDeprecation")?console.trace(d):console.warn(d);a=!0}return c.apply(this,arguments)}}}).call(this,"undefined"!==typeof global?global:"undefined"!==typeof self?self:"undefined"!==typeof window?
window:{})},{}],30:[function(f,k,h){window.SignLib=f("secp256k1/lib/js");window.Buffer=f("safe-buffer").Buffer},{"safe-buffer":42,"secp256k1/lib/js":48}],31:[function(f,k,h){function d(a){c.call(this);(this.hashMode="string"===typeof a)?this[a]=this._finalOrDigest:this["final"]=this._finalOrDigest;this._final&&(this.__final=this._final,this._final=null);this._encoding=this._decoder=null}var e=f("safe-buffer").Buffer,c=f("stream").Transform,g=f("string_decoder").StringDecoder;f("inherits")(d,c);d.prototype.update=
function(a,b,c){"string"===typeof a&&(a=e.from(a,b));a=this._update(a);if(this.hashMode)return this;c&&(a=this._toString(a,c));return a};d.prototype.setAutoPadding=function(){};d.prototype.getAuthTag=function(){throw Error("trying to get auth tag in unsupported state");};d.prototype.setAuthTag=function(){throw Error("trying to set auth tag in unsupported state");};d.prototype.setAAD=function(){throw Error("trying to set aad in unsupported state");};d.prototype._transform=function(a,b,c){try{this.hashMode?
this._update(a):this.push(this._update(a))}catch(t){var d=t}finally{c(d)}};d.prototype._flush=function(a){try{this.push(this.__final())}catch(m){var b=m}a(b)};d.prototype._finalOrDigest=function(a){var b=this.__final()||e.alloc(0);a&&(b=this._toString(b,a,!0));return b};d.prototype._toString=function(a,b,c){this._decoder||(this._decoder=new g(b),this._encoding=b);if(this._encoding!==b)throw Error("can't switch encodings");a=this._decoder.write(a);c&&(a+=this._decoder.end());return a};k.exports=d},
{inherits:39,"safe-buffer":42,stream:26,string_decoder:27}],32:[function(f,k,h){function d(b){a.call(this,"digest");this._hash=b}h=f("inherits");var e=f("md5.js"),c=f("ripemd160"),g=f("sha.js"),a=f("cipher-base");h(d,a);d.prototype._update=function(a){this._hash.update(a)};d.prototype._final=function(){return this._hash.digest()};k.exports=function(a){a=a.toLowerCase();return"md5"===a?new e:"rmd160"===a||"ripemd160"===a?new c:new d(g(a))}},{"cipher-base":31,inherits:39,"md5.js":40,ripemd160:41,"sha.js":51}],
33:[function(f,k,h){var d=f("md5.js");k.exports=function(e){return(new d).update(e).digest()}},{"md5.js":40}],34:[function(f,k,h){function d(a,d){c.call(this,"digest");"string"===typeof d&&(d=g.from(d));var e="sha512"===a||"sha384"===a?128:64;this._alg=a;this._key=d;d.length>e?d=("rmd160"===a?new b:m(a)).update(d).digest():d.length<e&&(d=g.concat([d,p],e));for(var f=this._ipad=g.allocUnsafe(e),n=this._opad=g.allocUnsafe(e),t=0;t<e;t++)f[t]=d[t]^54,n[t]=d[t]^92;this._hash="rmd160"===a?new b:m(a);this._hash.update(f)}
h=f("inherits");var e=f("./legacy"),c=f("cipher-base"),g=f("safe-buffer").Buffer,a=f("create-hash/md5"),b=f("ripemd160"),m=f("sha.js"),p=g.alloc(128);h(d,c);d.prototype._update=function(a){this._hash.update(a)};d.prototype._final=function(){var a=this._hash.digest();return("rmd160"===this._alg?new b:m(this._alg)).update(this._opad).update(a).digest()};k.exports=function(b,c){b=b.toLowerCase();return"rmd160"===b||"ripemd160"===b?new d("rmd160",c):"md5"===b?new e(a,c):new d(b,c)}},{"./legacy":35,"cipher-base":31,
"create-hash/md5":33,inherits:39,ripemd160:41,"safe-buffer":42,"sha.js":51}],35:[function(f,k,h){function d(a,b){c.call(this,"digest");"string"===typeof b&&(b=e.from(b));this._alg=a;this._key=b;64<b.length?b=a(b):64>b.length&&(b=e.concat([b,g],64));for(var d=this._ipad=e.allocUnsafe(64),p=this._opad=e.allocUnsafe(64),f=0;64>f;f++)d[f]=b[f]^54,p[f]=b[f]^92;this._hash=[d]}h=f("inherits");var e=f("safe-buffer").Buffer,c=f("cipher-base"),g=e.alloc(128);h(d,c);d.prototype._update=function(a){this._hash.push(a)};
d.prototype._final=function(){var a=this._alg(e.concat(this._hash));return this._alg(e.concat([this._opad,a]))};k.exports=d},{"cipher-base":31,inherits:39,"safe-buffer":42}],36:[function(f,k,h){(function(d){function e(a,b,c,d){var e=g[a];if(void 0===e)throw Error("hash "+a+" is not supported");this._algo=a;this._securityStrength=e.securityStrength/8;this._outlen=e.outlen/8;this._reseedInterval=281474976710656;this._init(b,c,d)}var c=f("create-hmac"),g=f("./lib/hash-info.json"),a=new d(0),b=new d([0]),
m=new d([1]);e.prototype._update=function(a){var d=c(this._algo,this._K).update(this._V).update(b);a&&d.update(a);this._K=d.digest();this._V=c(this._algo,this._K).update(this._V).digest();a&&(this._K=c(this._algo,this._K).update(this._V).update(m).update(a).digest(),this._V=c(this._algo,this._K).update(this._V).digest())};e.prototype._init=function(b,c,g){if(b.length<this._securityStrength)throw Error("Not enough entropy");this._K=new d(this._outlen);this._V=new d(this._outlen);for(var e=0;e<this._K.length;++e)this._K[e]=
0,this._V[e]=1;this._update(d.concat([b,c,g||a]));this._reseed=1};e.prototype.reseed=function(b,c){if(b.length<this._securityStrength)throw Error("Not enough entropy");this._update(d.concat([b,c||a]));this._reseed=1};e.prototype.generate=function(a,b){if(this._reseed>this._reseedInterval)throw Error("Reseed is required");b&&0===b.length&&(b=void 0);b&&this._update(b);for(var g=new d(0);g.length<a;)this._V=c(this._algo,this._K).update(this._V).digest(),g=d.concat([g,this._V]);this._update(b);this._reseed+=
1;return g.slice(0,a)};k.exports=e}).call(this,f("buffer").Buffer)},{"./lib/hash-info.json":37,buffer:3,"create-hmac":34}],37:[function(f,k,h){k.exports={sha1:{securityStrength:128,outlen:160,seedlen:440},sha224:{securityStrength:192,outlen:224,seedlen:440},sha256:{securityStrength:256,outlen:256,seedlen:440},sha384:{securityStrength:256,outlen:384,seedlen:888},sha512:{securityStrength:256,outlen:512,seedlen:888}}},{}],38:[function(f,k,h){function d(d){c.call(this);this._block=e.allocUnsafe(d);this._blockSize=
d;this._blockOffset=0;this._length=[0,0,0,0];this._finalized=!1}var e=f("safe-buffer").Buffer,c=f("stream").Transform;f("inherits")(d,c);d.prototype._transform=function(c,a,b){var d=null;try{this.update(c,a)}catch(p){d=p}b(d)};d.prototype._flush=function(c){var a=null;try{this.push(this.digest())}catch(b){a=b}c(a)};d.prototype.update=function(c,a){var b=c;if(!e.isBuffer(b)&&"string"!==typeof b)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw Error("Digest already called");
e.isBuffer(c)||(c=e.from(c,a));b=this._block;for(var d=0;this._blockOffset+c.length-d>=this._blockSize;){for(var g=this._blockOffset;g<this._blockSize;)b[g++]=c[d++];this._update();this._blockOffset=0}for(;d<c.length;)b[this._blockOffset++]=c[d++];b=0;for(d=8*c.length;0<d;++b)this._length[b]+=d,d=this._length[b]/4294967296|0,0<d&&(this._length[b]-=4294967296*d);return this};d.prototype._update=function(){throw Error("_update is not implemented");};d.prototype.digest=function(c){if(this._finalized)throw Error("Digest already called");
this._finalized=!0;var a=this._digest();void 0!==c&&(a=a.toString(c));this._block.fill(0);for(c=this._blockOffset=0;4>c;++c)this._length[c]=0;return a};d.prototype._digest=function(){throw Error("_digest is not implemented");};k.exports=d},{inherits:39,"safe-buffer":42,stream:26}],39:[function(f,k,h){arguments[4][7][0].apply(h,arguments)},{dup:7}],40:[function(f,k,h){(function(d){function e(){t.call(this,64);this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878}function c(a,b){return a<<
b|a>>>32-b}function g(a,b,d,e,g,m,f){return c(a+(b&d|~b&e)+g+m|0,f)+b|0}function a(a,b,d,e,g,m,f){return c(a+(b&e|d&~e)+g+m|0,f)+b|0}function b(a,b,d,e,g,m,f){return c(a+(b^d^e)+g+m|0,f)+b|0}function m(a,b,d,e,g,m,f){return c(a+(d^(b|~e))+g+m|0,f)+b|0}var p=f("inherits"),t=f("hash-base"),n=Array(16);p(e,t);e.prototype._update=function(){for(var c=0;16>c;++c)n[c]=this._block.readInt32LE(4*c);c=this._a;var d=this._b,e=this._c,f=this._d;c=g(c,d,e,f,n[0],3614090360,7);f=g(f,c,d,e,n[1],3905402710,12);
e=g(e,f,c,d,n[2],606105819,17);d=g(d,e,f,c,n[3],3250441966,22);c=g(c,d,e,f,n[4],4118548399,7);f=g(f,c,d,e,n[5],1200080426,12);e=g(e,f,c,d,n[6],2821735955,17);d=g(d,e,f,c,n[7],4249261313,22);c=g(c,d,e,f,n[8],1770035416,7);f=g(f,c,d,e,n[9],2336552879,12);e=g(e,f,c,d,n[10],4294925233,17);d=g(d,e,f,c,n[11],2304563134,22);c=g(c,d,e,f,n[12],1804603682,7);f=g(f,c,d,e,n[13],4254626195,12);e=g(e,f,c,d,n[14],2792965006,17);d=g(d,e,f,c,n[15],1236535329,22);c=a(c,d,e,f,n[1],4129170786,5);f=a(f,c,d,e,n[6],3225465664,
9);e=a(e,f,c,d,n[11],643717713,14);d=a(d,e,f,c,n[0],3921069994,20);c=a(c,d,e,f,n[5],3593408605,5);f=a(f,c,d,e,n[10],38016083,9);e=a(e,f,c,d,n[15],3634488961,14);d=a(d,e,f,c,n[4],3889429448,20);c=a(c,d,e,f,n[9],568446438,5);f=a(f,c,d,e,n[14],3275163606,9);e=a(e,f,c,d,n[3],4107603335,14);d=a(d,e,f,c,n[8],1163531501,20);c=a(c,d,e,f,n[13],2850285829,5);f=a(f,c,d,e,n[2],4243563512,9);e=a(e,f,c,d,n[7],1735328473,14);d=a(d,e,f,c,n[12],2368359562,20);c=b(c,d,e,f,n[5],4294588738,4);f=b(f,c,d,e,n[8],2272392833,
11);e=b(e,f,c,d,n[11],1839030562,16);d=b(d,e,f,c,n[14],4259657740,23);c=b(c,d,e,f,n[1],2763975236,4);f=b(f,c,d,e,n[4],1272893353,11);e=b(e,f,c,d,n[7],4139469664,16);d=b(d,e,f,c,n[10],3200236656,23);c=b(c,d,e,f,n[13],681279174,4);f=b(f,c,d,e,n[0],3936430074,11);e=b(e,f,c,d,n[3],3572445317,16);d=b(d,e,f,c,n[6],76029189,23);c=b(c,d,e,f,n[9],3654602809,4);f=b(f,c,d,e,n[12],3873151461,11);e=b(e,f,c,d,n[15],530742520,16);d=b(d,e,f,c,n[2],3299628645,23);c=m(c,d,e,f,n[0],4096336452,6);f=m(f,c,d,e,n[7],1126891415,
10);e=m(e,f,c,d,n[14],2878612391,15);d=m(d,e,f,c,n[5],4237533241,21);c=m(c,d,e,f,n[12],1700485571,6);f=m(f,c,d,e,n[3],2399980690,10);e=m(e,f,c,d,n[10],4293915773,15);d=m(d,e,f,c,n[1],2240044497,21);c=m(c,d,e,f,n[8],1873313359,6);f=m(f,c,d,e,n[15],4264355552,10);e=m(e,f,c,d,n[6],2734768916,15);d=m(d,e,f,c,n[13],1309151649,21);c=m(c,d,e,f,n[4],4149444226,6);f=m(f,c,d,e,n[11],3174756917,10);e=m(e,f,c,d,n[2],718787259,15);d=m(d,e,f,c,n[9],3951481745,21);this._a=this._a+c|0;this._b=this._b+d|0;this._c=
this._c+e|0;this._d=this._d+f|0};e.prototype._digest=function(){this._block[this._blockOffset++]=128;56<this._blockOffset&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0);this._block.fill(0,this._blockOffset,56);this._block.writeUInt32LE(this._length[0],56);this._block.writeUInt32LE(this._length[1],60);this._update();var a=new d(16);a.writeInt32LE(this._a,0);a.writeInt32LE(this._b,4);a.writeInt32LE(this._c,8);a.writeInt32LE(this._d,12);return a};k.exports=e}).call(this,
f("buffer").Buffer)},{buffer:3,"hash-base":38,inherits:39}],41:[function(f,k,h){function d(){g.call(this,64);this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878;this._e=3285377520}function e(a,b){return a<<b|a>>>32-b}var c=f("buffer").Buffer;h=f("inherits");var g=f("hash-base"),a=Array(16),b=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,
15,13],m=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],t=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,
6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],n=[0,1518500249,1859775393,2400959708,2840853838],q=[1352829926,1548603684,1836072691,2053994217,0];h(d,g);d.prototype._update=function(){for(var c=0;16>c;++c)a[c]=this._block.readInt32LE(4*c);var d=this._a|0;c=this._b|0;for(var g=this._c|0,f=this._d|0,h=this._e|0,k=this._a|0,H=this._b|0,F=this._c|0,G=this._d|0,C=this._e|0,A=0;80>A;A+=1){if(16>A){var E=h;E=e(d+(c^g^f)+a[b[A]]+n[0]|0,p[A])+E|
0;d=C;var K=e(k+(H^(F|~G))+a[m[A]]+q[0]|0,t[A])+d|0}else 32>A?(E=h,E=e(d+(c&g|~c&f)+a[b[A]]+n[1]|0,p[A])+E|0,d=C,K=e(k+(H&G|F&~G)+a[m[A]]+q[1]|0,t[A])+d|0):48>A?(E=h,E=e(d+((c|~g)^f)+a[b[A]]+n[2]|0,p[A])+E|0,d=C,K=e(k+((H|~F)^G)+a[m[A]]+q[2]|0,t[A])+d|0):64>A?(E=h,E=e(d+(c&f|g&~f)+a[b[A]]+n[3]|0,p[A])+E|0,d=C,K=e(k+(H&F|~H&G)+a[m[A]]+q[3]|0,t[A])+d|0):(E=h,E=e(d+(c^(g|~f))+a[b[A]]+n[4]|0,p[A])+E|0,d=C,K=e(k+(H^F^G)+a[m[A]]+q[4]|0,t[A])+d|0);d=h;h=f;f=e(g,10);g=c;c=E;k=C;C=G;G=e(F,10);F=H;H=K}g=this._b+
g+G|0;this._b=this._c+f+C|0;this._c=this._d+h+k|0;this._d=this._e+d+H|0;this._e=this._a+c+F|0;this._a=g};d.prototype._digest=function(){this._block[this._blockOffset++]=128;56<this._blockOffset&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0);this._block.fill(0,this._blockOffset,56);this._block.writeUInt32LE(this._length[0],56);this._block.writeUInt32LE(this._length[1],60);this._update();var a=c.alloc?c.alloc(20):new c(20);a.writeInt32LE(this._a,0);a.writeInt32LE(this._b,
4);a.writeInt32LE(this._c,8);a.writeInt32LE(this._d,12);a.writeInt32LE(this._e,16);return a};k.exports=d},{buffer:3,"hash-base":38,inherits:39}],42:[function(f,k,h){arguments[4][25][0].apply(h,arguments)},{buffer:3,dup:25}],43:[function(f,k,h){function d(){this.negative=0;this.words=null;this.length=0}var e=f("safe-buffer").Buffer;f=f("./optimized");d.fromNumber=function(c){var e=new d;e.words=[c&67108863];e.length=1;return e};d.fromBuffer=function(c){var e=new d;e.words=Array(10);e.words[0]=(c[28]&
3)<<24|c[29]<<16|c[30]<<8|c[31];e.words[1]=(c[25]&15)<<22|c[26]<<14|c[27]<<6|c[28]>>>2;e.words[2]=(c[22]&63)<<20|c[23]<<12|c[24]<<4|c[25]>>>4;e.words[3]=(c[19]&255)<<18|c[20]<<10|c[21]<<2|c[22]>>>6;e.words[4]=(c[15]&3)<<24|c[16]<<16|c[17]<<8|c[18];e.words[5]=(c[12]&15)<<22|c[13]<<14|c[14]<<6|c[15]>>>2;e.words[6]=(c[9]&63)<<20|c[10]<<12|c[11]<<4|c[12]>>>4;e.words[7]=(c[6]&255)<<18|c[7]<<10|c[8]<<2|c[9]>>>6;e.words[8]=(c[2]&3)<<24|c[3]<<16|c[4]<<8|c[5];e.words[9]=c[0]<<14|c[1]<<6|c[2]>>>2;e.length=
10;return e.strip()};d.prototype.toBuffer=function(){for(var c=this.words,d=this.length;10>d;++d)c[d]=0;return e.from([c[9]>>>14&255,c[9]>>>6&255,(c[9]&63)<<2|c[8]>>>24&3,c[8]>>>16&255,c[8]>>>8&255,c[8]&255,c[7]>>>18&255,c[7]>>>10&255,c[7]>>>2&255,(c[7]&3)<<6|c[6]>>>20&63,c[6]>>>12&255,c[6]>>>4&255,(c[6]&15)<<4|c[5]>>>22&15,c[5]>>>14&255,c[5]>>>6&255,(c[5]&63)<<2|c[4]>>>24&3,c[4]>>>16&255,c[4]>>>8&255,c[4]&255,c[3]>>>18&255,c[3]>>>10&255,c[3]>>>2&255,(c[3]&3)<<6|c[2]>>>20&63,c[2]>>>12&255,c[2]>>>
4&255,(c[2]&15)<<4|c[1]>>>22&15,c[1]>>>14&255,c[1]>>>6&255,(c[1]&63)<<2|c[0]>>>24&3,c[0]>>>16&255,c[0]>>>8&255,c[0]&255])};d.prototype.clone=function(){var c=new d;c.words=Array(this.length);for(var e=0;e<this.length;e++)c.words[e]=this.words[e];c.length=this.length;c.negative=this.negative;return c};d.prototype.strip=function(){for(;1<this.length&&0===(this.words[this.length-1]|0);)this.length--;return this};d.prototype.normSign=function(){1===this.length&&0===this.words[0]&&(this.negative=0);return this};
d.prototype.isEven=function(){return 0===(this.words[0]&1)};d.prototype.isOdd=function(){return 1===(this.words[0]&1)};d.prototype.isZero=function(){return 1===this.length&&0===this.words[0]};d.prototype.ucmp=function(c){if(this.length!==c.length)return this.length>c.length?1:-1;for(var d=this.length-1;0<=d;--d)if(this.words[d]!==c.words[d])return this.words[d]>c.words[d]?1:-1;return 0};d.prototype.gtOne=function(){return 1<this.length||1<this.words[0]};d.prototype.isOverflow=function(){return 0<=
this.ucmp(d.n)};d.prototype.isHigh=function(){return 1===this.ucmp(d.nh)};d.prototype.bitLengthGT256=function(){return 10<this.length||10===this.length&&4194303<this.words[9]};d.prototype.iuaddn=function(c){this.words[0]+=c;for(c=0;67108863<this.words[c]&&c<this.length;++c)this.words[c]-=67108864,this.words[c+1]+=1;c===this.length&&(this.words[c]=1,this.length+=1);return this};d.prototype.iadd=function(c){if(this.negative!==c.negative)return 0!==this.negative?(this.negative=0,this.isub(c),this.negative^=
1):(c.negative=0,this.isub(c),c.negative=1),this.normSign();if(this.length>c.length)var d=this;else d=c,c=this;for(var a=0,b=0;a<c.length;++a)b=d.words[a]+c.words[a]+b,this.words[a]=b&67108863,b>>>=26;for(;0!==b&&a<d.length;++a)b=d.words[a]+b,this.words[a]=b&67108863,b>>>=26;this.length=d.length;if(0!==b)this.words[this.length++]=b;else if(d!==this)for(;a<d.length;++a)this.words[a]=d.words[a];return this};d.prototype.add=function(c){return this.clone().iadd(c)};d.prototype.isub=function(c){if(this.negative!==
c.negative)return 0!==this.negative?(this.negative=0,this.iadd(c),this.negative=1):(c.negative=0,this.iadd(c),c.negative=1),this.normSign();var d=this.ucmp(c);if(0===d)return this.negative=0,this.words[0]=0,this.length=1,this;0<d?d=this:(d=c,c=this);for(var a=0,b=0;a<c.length;++a){var e=d.words[a]-c.words[a]+b;b=e>>26;this.words[a]=e&67108863}for(;0!==b&&a<d.length;++a)e=d.words[a]+b,b=e>>26,this.words[a]=e&67108863;if(0===b&&a<d.length&&d!==this)for(;a<d.length;++a)this.words[a]=d.words[a];this.length=
Math.max(this.length,a);d!==this&&(this.negative^=1);return this.strip().normSign()};d.prototype.sub=function(c){return this.clone().isub(c)};d.umulTo=function(c,d,a){a.length=c.length+d.length-1;var b=c.words[0]*d.words[0],e=b/67108864|0;a.words[0]=b&67108863;b=1;for(var g=a.length;b<g;b++){var f=e>>>26,n=e&67108863;e=Math.max(0,b-c.length+1);for(var q=Math.min(b,d.length-1);e<=q;e++)n=c.words[b-e]*d.words[e]+n,f+=n/67108864|0,n&=67108863;a.words[b]=n;e=f}0!==e&&(a.words[a.length++]=e);return a.strip()};
d.umulTo10x10=Math.imul?f.umulTo10x10:d.umulTo;d.umulnTo=function(c,d,a){if(0===d)return a.words=[0],a.length=1,a;for(var b=0,e=0;b<c.length;++b)e=c.words[b]*d+e,a.words[b]=e&67108863,e=e/67108864|0;0<e?(a.words[b]=e,a.length=c.length+1):a.length=c.length;return a};d.prototype.umul=function(c){var e=new d;e.words=Array(this.length+c.length);return 10===this.length&&10===c.length?d.umulTo10x10(this,c,e):1===this.length?d.umulnTo(c,this.words[0],e):1===c.length?d.umulnTo(this,c.words[0],e):d.umulTo(this,
c,e)};d.prototype.isplit=function(c){c.length=Math.min(this.length,9);for(var d=0;d<c.length;++d)c.words[d]=this.words[d];if(9>=this.length)return this.words[0]=0,this.length=1,this;var a=this.words[9];c.words[c.length++]=a&4194303;for(d=10;d<this.length;++d)c=this.words[d],this.words[d-10]=(c&4194303)<<4|a>>>22,a=c;a>>>=22;this.words[d-10]=a;this.length=0===a&&10<this.length?this.length-10:this.length-9;return this};d.prototype.fireduce=function(){this.isOverflow()&&this.isub(d.n);return this};d.prototype.ureduce=
function(){var c=this.clone().isplit(d.tmp).umul(d.nc).iadd(d.tmp);c.bitLengthGT256()&&(c=c.isplit(d.tmp).umul(d.nc).iadd(d.tmp),c.bitLengthGT256()&&(c=c.isplit(d.tmp).umul(d.nc).iadd(d.tmp)));return c.fireduce()};d.prototype.ishrn=function(c){for(var d=(1<<c)-1,a=26-c,b=this.length-1,e=0;0<=b;--b){var f=this.words[b];this.words[b]=e<<a|f>>>c;e=f&d}1<this.length&&0===this.words[this.length-1]&&--this.length;return this};d.prototype.uinvm=function(){for(var c=this.clone(),e=d.n.clone(),a=d.fromNumber(1),
b=d.fromNumber(0),f=d.fromNumber(0),p=d.fromNumber(1);c.isEven()&&e.isEven();){for(var t=1,n=1;0===(c.words[0]&n)&&0===(e.words[0]&n)&&26>t;++t,n<<=1);c.ishrn(t);e.ishrn(t)}t=e.clone();for(n=c.clone();!c.isZero();){for(var q=0,h=1;0===(c.words[0]&h)&&26>q;++q,h<<=1);if(0<q)for(c.ishrn(q);0<q--;){if(a.isOdd()||b.isOdd())a.iadd(t),b.isub(n);a.ishrn(1);b.ishrn(1)}q=0;for(h=1;0===(e.words[0]&h)&&26>q;++q,h<<=1);if(0<q)for(e.ishrn(q);0<q--;){if(f.isOdd()||p.isOdd())f.iadd(t),p.isub(n);f.ishrn(1);p.ishrn(1)}0<=
c.ucmp(e)?(c.isub(e),a.isub(f),b.isub(p)):(e.isub(c),f.isub(a),p.isub(b))}return 1===f.negative?(f.negative=0,c=f.ureduce(),c.negative^=1,c.normSign().iadd(d.n)):f.ureduce()};d.prototype.imulK=function(){this.words[this.length]=0;this.words[this.length+1]=0;this.length+=2;for(var c=0,d=0;c<this.length;++c){var a=this.words[c]|0;d+=977*a;this.words[c]=d&67108863;d=64*a+(d/67108864|0)}0===this.words[this.length-1]&&(--this.length,0===this.words[this.length-1]&&--this.length);return this};d.prototype.redIReduce=
function(){this.isplit(d.tmp).imulK().iadd(d.tmp);this.bitLengthGT256()&&this.isplit(d.tmp).imulK().iadd(d.tmp);var c=this.ucmp(d.p);0===c?(this.words[0]=0,this.length=1):0<c?this.isub(d.p):this.strip();return this};d.prototype.redNeg=function(){return this.isZero()?d.fromNumber(0):d.p.sub(this)};d.prototype.redAdd=function(c){return this.clone().redIAdd(c)};d.prototype.redIAdd=function(c){this.iadd(c);0<=this.ucmp(d.p)&&this.isub(d.p);return this};d.prototype.redIAdd7=function(){this.iuaddn(7);0<=
this.ucmp(d.p)&&this.isub(d.p);return this};d.prototype.redSub=function(c){return this.clone().redISub(c)};d.prototype.redISub=function(c){this.isub(c);0!==this.negative&&this.iadd(d.p);return this};d.prototype.redMul=function(c){return this.umul(c).redIReduce()};d.prototype.redSqr=function(){return this.umul(this).redIReduce()};d.prototype.redSqrt=function(){if(this.isZero())return this.clone();var c=this.redSqr(),d=c.redSqr();d=d.redSqr().redMul(d);c=d.redMul(c);for(var a=c.redMul(this),b=a,e=0;54>
e;++e)b=b.redSqr().redSqr().redSqr().redSqr().redMul(a);b=b.redSqr().redSqr().redSqr().redSqr().redMul(c);for(e=0;5>e;++e)b=b.redSqr().redSqr().redSqr().redSqr().redMul(a);b=b.redSqr().redSqr().redSqr().redSqr().redMul(d);b=b.redSqr().redSqr().redSqr().redSqr().redSqr().redSqr().redMul(d);return 0===b.redSqr().ucmp(this)?b:null};d.prototype.redInvm=function(){for(var c=this.clone(),e=d.p.clone(),a=d.fromNumber(1),b=d.fromNumber(0);c.gtOne()&&e.gtOne();){for(var f=0,p=1;0===(c.words[0]&p)&&26>f;++f,
p<<=1);if(0<f)for(c.ishrn(f);0<f--;)a.isOdd()&&a.iadd(d.p),a.ishrn(1);f=0;for(p=1;0===(e.words[0]&p)&&26>f;++f,p<<=1);if(0<f)for(e.ishrn(f);0<f--;)b.isOdd()&&b.iadd(d.p),b.ishrn(1);0<=c.ucmp(e)?(c.isub(e),a.isub(b)):(e.isub(c),b.isub(a))}c=1===c.length&&1===c.words[0]?a:b;0!==c.negative&&c.iadd(d.p);return 0!==c.negative?(c.negative=0,c.redIReduce().redNeg()):c.redIReduce()};d.prototype.getNAF=function(c){var d=[],a=1<<c+1,b=a-1;a>>=1;for(var e=this.clone();!e.isZero();){for(var f=0,t=1;0===(e.words[0]&
t)&&26>f;++f,t<<=1)d.push(0);if(0!==f)e.ishrn(f);else if(f=e.words[0]&b,f>=a)d.push(a-f),e.iuaddn(f-a).ishrn(1);else if(d.push(f),e.words[0]-=f,!e.isZero()){for(f=c-1;0<f;--f)d.push(0);e.ishrn(c)}}return d};d.prototype.inspect=function(){if(this.isZero())return"0";for(var c=this.toBuffer().toString("hex"),d=0;"0"===c[d];++d);return c.slice(d)};d.n=d.fromBuffer(e.from("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141","hex"));d.nh=d.n.clone().ishrn(1);d.nc=d.fromBuffer(e.from("000000000000000000000000000000014551231950B75FC4402DA1732FC9BEBF",
"hex"));d.p=d.fromBuffer(e.from("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F","hex"));d.psn=d.p.sub(d.n);d.tmp=new d;d.tmp.words=Array(10);d.fromNumber(1).words[3]=0;k.exports=d},{"./optimized":44,"safe-buffer":42}],44:[function(f,k,h){h.umulTo10x10=function(d,e,c){var g=d.words,a=e.words;e=c.words;d=0;var b=g[0]|0,f=b&8191,p=b>>>13,t=g[1]|0;b=t&8191;var n=t>>>13,q=g[2]|0;t=q&8191;var h=q>>>13,k=g[3]|0;q=k&8191;var v=k>>>13,B=g[4]|0;k=B&8191;var z=B>>>13,x=g[5]|0;B=x&8191;var H=
x>>>13,F=g[6]|0;x=F&8191;var G=F>>>13,C=g[7]|0;F=C&8191;var A=C>>>13,E=g[8]|0;C=E&8191;E>>>=13;var K=g[9]|0;g=K&8191;K>>>=13;var D=a[0]|0,I=D&8191,J=D>>>13,y=a[1]|0;D=y&8191;var L=y>>>13,w=a[2]|0;y=w&8191;var M=w>>>13,l=a[3]|0;w=l&8191;var T=l>>>13,O=a[4]|0;l=O&8191;var U=O>>>13,P=a[5]|0;O=P&8191;var W=P>>>13,S=a[6]|0;P=S&8191;var V=S>>>13,R=a[7]|0;S=R&8191;var X=R>>>13;var r=a[8]|0;R=r&8191;var aa=r>>>13;a=a[9]|0;var Y=a&8191,Z=a>>>13;c.length=19;var u=Math.imul(f,I);a=Math.imul(f,J);a+=Math.imul(p,
I);r=Math.imul(p,J);var ba=d+u+((a&8191)<<13);d=r+(a>>>13)+(ba>>>26);ba&=67108863;u=Math.imul(b,I);a=Math.imul(b,J);a+=Math.imul(n,I);r=Math.imul(n,J);u+=Math.imul(f,D);a+=Math.imul(f,L);a+=Math.imul(p,D);r+=Math.imul(p,L);var ca=d+u+((a&8191)<<13);d=r+(a>>>13)+(ca>>>26);ca&=67108863;u=Math.imul(t,I);a=Math.imul(t,J);a+=Math.imul(h,I);r=Math.imul(h,J);u+=Math.imul(b,D);a+=Math.imul(b,L);a+=Math.imul(n,D);r+=Math.imul(n,L);u+=Math.imul(f,y);a+=Math.imul(f,M);a+=Math.imul(p,y);r+=Math.imul(p,M);var da=
d+u+((a&8191)<<13);d=r+(a>>>13)+(da>>>26);da&=67108863;u=Math.imul(q,I);a=Math.imul(q,J);a+=Math.imul(v,I);r=Math.imul(v,J);u+=Math.imul(t,D);a+=Math.imul(t,L);a+=Math.imul(h,D);r+=Math.imul(h,L);u+=Math.imul(b,y);a+=Math.imul(b,M);a+=Math.imul(n,y);r+=Math.imul(n,M);u+=Math.imul(f,w);a+=Math.imul(f,T);a+=Math.imul(p,w);r+=Math.imul(p,T);var ea=d+u+((a&8191)<<13);d=r+(a>>>13)+(ea>>>26);ea&=67108863;u=Math.imul(k,I);a=Math.imul(k,J);a+=Math.imul(z,I);r=Math.imul(z,J);u+=Math.imul(q,D);a+=Math.imul(q,
L);a+=Math.imul(v,D);r+=Math.imul(v,L);u+=Math.imul(t,y);a+=Math.imul(t,M);a+=Math.imul(h,y);r+=Math.imul(h,M);u+=Math.imul(b,w);a+=Math.imul(b,T);a+=Math.imul(n,w);r+=Math.imul(n,T);u+=Math.imul(f,l);a+=Math.imul(f,U);a+=Math.imul(p,l);r+=Math.imul(p,U);var fa=d+u+((a&8191)<<13);d=r+(a>>>13)+(fa>>>26);fa&=67108863;u=Math.imul(B,I);a=Math.imul(B,J);a+=Math.imul(H,I);r=Math.imul(H,J);u+=Math.imul(k,D);a+=Math.imul(k,L);a+=Math.imul(z,D);r+=Math.imul(z,L);u+=Math.imul(q,y);a+=Math.imul(q,M);a+=Math.imul(v,
y);r+=Math.imul(v,M);u+=Math.imul(t,w);a+=Math.imul(t,T);a+=Math.imul(h,w);r+=Math.imul(h,T);u+=Math.imul(b,l);a+=Math.imul(b,U);a+=Math.imul(n,l);r+=Math.imul(n,U);u+=Math.imul(f,O);a+=Math.imul(f,W);a+=Math.imul(p,O);r+=Math.imul(p,W);var ha=d+u+((a&8191)<<13);d=r+(a>>>13)+(ha>>>26);ha&=67108863;u=Math.imul(x,I);a=Math.imul(x,J);a+=Math.imul(G,I);r=Math.imul(G,J);u+=Math.imul(B,D);a+=Math.imul(B,L);a+=Math.imul(H,D);r+=Math.imul(H,L);u+=Math.imul(k,y);a+=Math.imul(k,M);a+=Math.imul(z,y);r+=Math.imul(z,
M);u+=Math.imul(q,w);a+=Math.imul(q,T);a+=Math.imul(v,w);r+=Math.imul(v,T);u+=Math.imul(t,l);a+=Math.imul(t,U);a+=Math.imul(h,l);r+=Math.imul(h,U);u+=Math.imul(b,O);a+=Math.imul(b,W);a+=Math.imul(n,O);r+=Math.imul(n,W);u+=Math.imul(f,P);a+=Math.imul(f,V);a+=Math.imul(p,P);r+=Math.imul(p,V);var ia=d+u+((a&8191)<<13);d=r+(a>>>13)+(ia>>>26);ia&=67108863;u=Math.imul(F,I);a=Math.imul(F,J);a+=Math.imul(A,I);r=Math.imul(A,J);u+=Math.imul(x,D);a+=Math.imul(x,L);a+=Math.imul(G,D);r+=Math.imul(G,L);u+=Math.imul(B,
y);a+=Math.imul(B,M);a+=Math.imul(H,y);r+=Math.imul(H,M);u+=Math.imul(k,w);a+=Math.imul(k,T);a+=Math.imul(z,w);r+=Math.imul(z,T);u+=Math.imul(q,l);a+=Math.imul(q,U);a+=Math.imul(v,l);r+=Math.imul(v,U);u+=Math.imul(t,O);a+=Math.imul(t,W);a+=Math.imul(h,O);r+=Math.imul(h,W);u+=Math.imul(b,P);a+=Math.imul(b,V);a+=Math.imul(n,P);r+=Math.imul(n,V);u+=Math.imul(f,S);a+=Math.imul(f,X);a+=Math.imul(p,S);r+=Math.imul(p,X);var ja=d+u+((a&8191)<<13);d=r+(a>>>13)+(ja>>>26);ja&=67108863;u=Math.imul(C,I);a=Math.imul(C,
J);a+=Math.imul(E,I);r=Math.imul(E,J);u+=Math.imul(F,D);a+=Math.imul(F,L);a+=Math.imul(A,D);r+=Math.imul(A,L);u+=Math.imul(x,y);a+=Math.imul(x,M);a+=Math.imul(G,y);r+=Math.imul(G,M);u+=Math.imul(B,w);a+=Math.imul(B,T);a+=Math.imul(H,w);r+=Math.imul(H,T);u+=Math.imul(k,l);a+=Math.imul(k,U);a+=Math.imul(z,l);r+=Math.imul(z,U);u+=Math.imul(q,O);a+=Math.imul(q,W);a+=Math.imul(v,O);r+=Math.imul(v,W);u+=Math.imul(t,P);a+=Math.imul(t,V);a+=Math.imul(h,P);r+=Math.imul(h,V);u+=Math.imul(b,S);a+=Math.imul(b,
X);a+=Math.imul(n,S);r+=Math.imul(n,X);u+=Math.imul(f,R);a+=Math.imul(f,aa);a+=Math.imul(p,R);r+=Math.imul(p,aa);var ka=d+u+((a&8191)<<13);d=r+(a>>>13)+(ka>>>26);ka&=67108863;u=Math.imul(g,I);a=Math.imul(g,J);a+=Math.imul(K,I);r=Math.imul(K,J);u+=Math.imul(C,D);a+=Math.imul(C,L);a+=Math.imul(E,D);r+=Math.imul(E,L);u+=Math.imul(F,y);a+=Math.imul(F,M);a+=Math.imul(A,y);r+=Math.imul(A,M);u+=Math.imul(x,w);a+=Math.imul(x,T);a+=Math.imul(G,w);r+=Math.imul(G,T);u+=Math.imul(B,l);a+=Math.imul(B,U);a+=Math.imul(H,
l);r+=Math.imul(H,U);u+=Math.imul(k,O);a+=Math.imul(k,W);a+=Math.imul(z,O);r+=Math.imul(z,W);u+=Math.imul(q,P);a+=Math.imul(q,V);a+=Math.imul(v,P);r+=Math.imul(v,V);u+=Math.imul(t,S);a+=Math.imul(t,X);a+=Math.imul(h,S);r+=Math.imul(h,X);u+=Math.imul(b,R);a+=Math.imul(b,aa);a+=Math.imul(n,R);r+=Math.imul(n,aa);u+=Math.imul(f,Y);a+=Math.imul(f,Z);a+=Math.imul(p,Y);r+=Math.imul(p,Z);f=d+u+((a&8191)<<13);d=r+(a>>>13)+(f>>>26);f&=67108863;u=Math.imul(g,D);a=Math.imul(g,L);a+=Math.imul(K,D);r=Math.imul(K,
L);u+=Math.imul(C,y);a+=Math.imul(C,M);a+=Math.imul(E,y);r+=Math.imul(E,M);u+=Math.imul(F,w);a+=Math.imul(F,T);a+=Math.imul(A,w);r+=Math.imul(A,T);u+=Math.imul(x,l);a+=Math.imul(x,U);a+=Math.imul(G,l);r+=Math.imul(G,U);u+=Math.imul(B,O);a+=Math.imul(B,W);a+=Math.imul(H,O);r+=Math.imul(H,W);u+=Math.imul(k,P);a+=Math.imul(k,V);a+=Math.imul(z,P);r+=Math.imul(z,V);u+=Math.imul(q,S);a+=Math.imul(q,X);a+=Math.imul(v,S);r+=Math.imul(v,X);u+=Math.imul(t,R);a+=Math.imul(t,aa);a+=Math.imul(h,R);r+=Math.imul(h,
aa);u+=Math.imul(b,Y);a+=Math.imul(b,Z);a+=Math.imul(n,Y);r+=Math.imul(n,Z);b=d+u+((a&8191)<<13);d=r+(a>>>13)+(b>>>26);b&=67108863;u=Math.imul(g,y);a=Math.imul(g,M);a+=Math.imul(K,y);r=Math.imul(K,M);u+=Math.imul(C,w);a+=Math.imul(C,T);a+=Math.imul(E,w);r+=Math.imul(E,T);u+=Math.imul(F,l);a+=Math.imul(F,U);a+=Math.imul(A,l);r+=Math.imul(A,U);u+=Math.imul(x,O);a+=Math.imul(x,W);a+=Math.imul(G,O);r+=Math.imul(G,W);u+=Math.imul(B,P);a+=Math.imul(B,V);a+=Math.imul(H,P);r+=Math.imul(H,V);u+=Math.imul(k,
S);a+=Math.imul(k,X);a+=Math.imul(z,S);r+=Math.imul(z,X);u+=Math.imul(q,R);a+=Math.imul(q,aa);a+=Math.imul(v,R);r+=Math.imul(v,aa);u+=Math.imul(t,Y);a+=Math.imul(t,Z);a+=Math.imul(h,Y);r+=Math.imul(h,Z);t=d+u+((a&8191)<<13);d=r+(a>>>13)+(t>>>26);t&=67108863;u=Math.imul(g,w);a=Math.imul(g,T);a+=Math.imul(K,w);r=Math.imul(K,T);u+=Math.imul(C,l);a+=Math.imul(C,U);a+=Math.imul(E,l);r+=Math.imul(E,U);u+=Math.imul(F,O);a+=Math.imul(F,W);a+=Math.imul(A,O);r+=Math.imul(A,W);u+=Math.imul(x,P);a+=Math.imul(x,
V);a+=Math.imul(G,P);r+=Math.imul(G,V);u+=Math.imul(B,S);a+=Math.imul(B,X);a+=Math.imul(H,S);r+=Math.imul(H,X);u+=Math.imul(k,R);a+=Math.imul(k,aa);a+=Math.imul(z,R);r+=Math.imul(z,aa);u+=Math.imul(q,Y);a+=Math.imul(q,Z);a+=Math.imul(v,Y);r+=Math.imul(v,Z);q=d+u+((a&8191)<<13);d=r+(a>>>13)+(q>>>26);q&=67108863;u=Math.imul(g,l);a=Math.imul(g,U);a+=Math.imul(K,l);r=Math.imul(K,U);u+=Math.imul(C,O);a+=Math.imul(C,W);a+=Math.imul(E,O);r+=Math.imul(E,W);u+=Math.imul(F,P);a+=Math.imul(F,V);a+=Math.imul(A,
P);r+=Math.imul(A,V);u+=Math.imul(x,S);a+=Math.imul(x,X);a+=Math.imul(G,S);r+=Math.imul(G,X);u+=Math.imul(B,R);a+=Math.imul(B,aa);a+=Math.imul(H,R);r+=Math.imul(H,aa);u+=Math.imul(k,Y);a+=Math.imul(k,Z);a+=Math.imul(z,Y);r+=Math.imul(z,Z);k=d+u+((a&8191)<<13);d=r+(a>>>13)+(k>>>26);k&=67108863;u=Math.imul(g,O);a=Math.imul(g,W);a+=Math.imul(K,O);r=Math.imul(K,W);u+=Math.imul(C,P);a+=Math.imul(C,V);a+=Math.imul(E,P);r+=Math.imul(E,V);u+=Math.imul(F,S);a+=Math.imul(F,X);a+=Math.imul(A,S);r+=Math.imul(A,
X);u+=Math.imul(x,R);a+=Math.imul(x,aa);a+=Math.imul(G,R);r+=Math.imul(G,aa);u+=Math.imul(B,Y);a+=Math.imul(B,Z);a+=Math.imul(H,Y);r+=Math.imul(H,Z);B=d+u+((a&8191)<<13);d=r+(a>>>13)+(B>>>26);B&=67108863;u=Math.imul(g,P);a=Math.imul(g,V);a+=Math.imul(K,P);r=Math.imul(K,V);u+=Math.imul(C,S);a+=Math.imul(C,X);a+=Math.imul(E,S);r+=Math.imul(E,X);u+=Math.imul(F,R);a+=Math.imul(F,aa);a+=Math.imul(A,R);r+=Math.imul(A,aa);u+=Math.imul(x,Y);a+=Math.imul(x,Z);a+=Math.imul(G,Y);r+=Math.imul(G,Z);x=d+u+((a&
8191)<<13);d=r+(a>>>13)+(x>>>26);x&=67108863;u=Math.imul(g,S);a=Math.imul(g,X);a+=Math.imul(K,S);r=Math.imul(K,X);u+=Math.imul(C,R);a+=Math.imul(C,aa);a+=Math.imul(E,R);r+=Math.imul(E,aa);u+=Math.imul(F,Y);a+=Math.imul(F,Z);a+=Math.imul(A,Y);r+=Math.imul(A,Z);F=d+u+((a&8191)<<13);d=r+(a>>>13)+(F>>>26);F&=67108863;u=Math.imul(g,R);a=Math.imul(g,aa);a+=Math.imul(K,R);r=Math.imul(K,aa);u+=Math.imul(C,Y);a+=Math.imul(C,Z);a+=Math.imul(E,Y);r+=Math.imul(E,Z);C=d+u+((a&8191)<<13);d=r+(a>>>13)+(C>>>26);
C&=67108863;u=Math.imul(g,Y);a=Math.imul(g,Z);a+=Math.imul(K,Y);r=Math.imul(K,Z);p=d+u+((a&8191)<<13);d=r+(a>>>13)+(p>>>26);e[0]=ba;e[1]=ca;e[2]=da;e[3]=ea;e[4]=fa;e[5]=ha;e[6]=ia;e[7]=ja;e[8]=ka;e[9]=f;e[10]=b;e[11]=t;e[12]=q;e[13]=k;e[14]=B;e[15]=x;e[16]=F;e[17]=C;e[18]=p&67108863;0!==d&&(e[19]=d,c.length++);return c}},{}],45:[function(f,k,h){function d(e,c,f){null===e&&null===c&&null===f?(this.y=this.x=d.one,this.z=d.zero):(this.x=e,this.y=c,this.z=f);this.zOne=this.z===d.one}f=f("./bn");d.zero=
f.fromNumber(0);d.one=f.fromNumber(1);d.prototype.neg=function(){return this.inf?this:new d(this.x,this.y.redNeg(),this.z)};d.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;var c=e.z.redSqr(),f=this.z.redSqr(),a=this.x.redMul(c),b=e.x.redMul(f);c=this.y.redMul(c).redMul(e.z);f=e.y.redMul(f).redMul(this.z);b=a.redSub(b);f=c.redSub(f);if(b.isZero())return f.isZero()?this.dbl():new d(null,null,null);var m=b.redSqr(),p=a.redMul(m);m=m.redMul(b);a=f.redSqr().redIAdd(m).redISub(p).redISub(p);
c=f.redMul(p.redISub(a)).redISub(c.redMul(m));e=this.z.redMul(e.z).redMul(b);return new d(a,c,e)};d.prototype.mixedAdd=function(e){if(this.inf)return e.toECJPoint();if(e.inf)return this;var c=this.z.redSqr(),f=this.x,a=e.x.redMul(c),b=this.y;e=e.y.redMul(c).redMul(this.z);a=f.redSub(a);e=b.redSub(e);if(a.isZero())return e.isZero()?this.dbl():new d(null,null,null);var m=a.redSqr();c=f.redMul(m);m=m.redMul(a);f=e.redSqr().redIAdd(m).redISub(c).redISub(c);b=e.redMul(c.redISub(f)).redISub(b.redMul(m));
a=this.z.redMul(a);return new d(f,b,a)};d.prototype.dbl=function(){if(this.inf)return this;if(this.zOne){var e=this.x.redSqr();var c=this.y.redSqr();var f=c.redSqr();c=this.x.redAdd(c).redSqr().redISub(e).redISub(f);c=c.redIAdd(c);e=e.redAdd(e).redIAdd(e);var a=e.redSqr().redISub(c).redISub(c),b=f.redIAdd(f).redIAdd(f).redIAdd(f);f=a;c=e.redMul(c.redISub(a)).redISub(b);e=this.y.redAdd(this.y)}else e=this.x.redSqr(),c=this.y.redSqr(),f=c.redSqr(),c=this.x.redAdd(c).redSqr().redISub(e).redISub(f),c=
c.redIAdd(c),e=e.redAdd(e).redIAdd(e),a=e.redSqr(),b=f.redIAdd(f).redIAdd(f).redIAdd(f),f=a.redISub(c).redISub(c),c=e.redMul(c.redISub(f)).redISub(b),e=this.y.redMul(this.z),e=e.redIAdd(e);return new d(f,c,e)};d.prototype.dblp=function(d){if(0===d||this.inf)return this;for(var c=this,e=0;e<d;e++)c=c.dbl();return c};Object.defineProperty(d.prototype,"inf",{enumerable:!0,get:function(){return this.z.isZero()}});k.exports=d},{"./bn":43}],46:[function(f,k,h){function d(a,b){null===a&&null===b?(this.x=
this.y=null,this.inf=!0):(this.x=a,this.y=b,this.inf=!1)}var e=f("safe-buffer").Buffer,c=f("./bn"),g=f("./ecjpoint");d.fromPublicKey=function(a){var b=a[0];if(33===a.length&&(2===b||3===b)){var e=c.fromBuffer(a.slice(1,33));if(0<=e.ucmp(c.p))return null;a=e.redSqr().redMul(e).redIAdd7().redSqrt();if(null===a)return null;3===b!==a.isOdd()&&(a=a.redNeg());return new d(e,a)}return 65!==a.length||4!==b&&6!==b&&7!==b?null:(e=c.fromBuffer(a.slice(1,33)),a=c.fromBuffer(a.slice(33,65)),0<=e.ucmp(c.p)||0<=
a.ucmp(c.p)||(6===b||7===b)&&a.isOdd()!==(7===b)||0!==e.redSqr().redMul(e).redIAdd7().ucmp(a.redSqr())?null:new d(e,a))};d.prototype.toPublicKey=function(a){var b=this.x,c=this.y;a?(a=e.alloc(33),a[0]=c.isOdd()?3:2,b.toBuffer().copy(a,1)):(a=e.alloc(65),a[0]=4,b.toBuffer().copy(a,1),c.toBuffer().copy(a,33));return a};d.fromECJPoint=function(a){if(a.inf)return new d(null,null);var b=a.z.redInvm(),c=b.redSqr(),e=a.x.redMul(c);a=a.y.redMul(c).redMul(b);return new d(e,a)};d.prototype.toECJPoint=function(){return this.inf?
new g(null,null,null):new g(this.x,this.y,g.one)};d.prototype.neg=function(){return this.inf?this:new d(this.x,this.y.redNeg())};d.prototype.add=function(a){if(this.inf)return a;if(a.inf)return this;if(0===this.x.ucmp(a.x))return 0===this.y.ucmp(a.y)?this.dbl():new d(null,null);var b=this.y.redSub(a.y);b.isZero()||(b=b.redMul(this.x.redSub(a.x).redInvm()));a=b.redSqr().redISub(this.x).redISub(a.x);b=b.redMul(this.x.redSub(a)).redISub(this.y);return new d(a,b)};d.prototype.dbl=function(){if(this.inf)return this;
var a=this.y.redAdd(this.y);if(a.isZero())return new d(null,null);var b=this.x.redSqr();b=b.redAdd(b).redIAdd(b).redMul(a.redInvm());a=b.redSqr().redISub(this.x.redAdd(this.x));b=b.redMul(this.x.redSub(a)).redISub(this.y);return new d(a,b)};d.prototype.mul=function(a){var b=this._getNAFPoints(4),c=b.points;a=a.getNAF(b.wnd);b=new g(null,null,null);for(var e=a.length-1;0<=e;e--){for(var f=0;0<=e&&0===a[e];e--,++f);0<=e&&(f+=1);b=b.dblp(f);if(0>e)break;f=a[e];b=0<f?b.mixedAdd(c[f-1>>1]):b.mixedAdd(c[-f-
1>>1].neg())}return d.fromECJPoint(b)};d.prototype._getNAFPoints1=function(){return{wnd:1,points:[this]}};d.prototype._getNAFPoints=function(a){var b=Array((1<<a)-1);b[0]=this;for(var c=this.dbl(),d=1;d<b.length;++d)b[d]=b[d-1].add(c);return{wnd:a,points:b}};k.exports=d},{"./bn":43,"./ecjpoint":45,"safe-buffer":42}],47:[function(f,k,h){function d(){this.x=c.fromBuffer(e.from("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798","hex"));this.y=c.fromBuffer(e.from("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",
"hex"));this.inf=!1;this._precompute()}var e=f("safe-buffer").Buffer,c=f("./bn"),g=f("./ecpoint"),a=f("./ecjpoint");d.prototype._precompute=function(){for(var a=new g(this.x,this.y),c=Array(66),d=c[0]=a,e=1;e<c.length;++e){for(var f=0;4>f;f++)d=d.dbl();c[e]=d}this.precomputed={naf:a._getNAFPoints(7),doubles:{step:4,points:c,negpoints:c.map(function(a){return a.neg()})}}};d.prototype.mul=function(b){var c=this.precomputed.doubles.step,d=this.precomputed.doubles.points,e=this.precomputed.doubles.negpoints,
f=b.getNAF(1),h=((1<<c+1)-(0===c%2?2:1))/3;b=[];for(var k=0;k<f.length;k+=c){for(var N=0,v=k+c-1;v>=k;v--)N=(N<<1)+f[v];b.push(N)}c=new a(null,null,null);for(f=new a(null,null,null);0<h;h--){for(k=0;k<b.length;k++)b[k]===h?f=f.mixedAdd(d[k]):b[k]===-h&&(f=f.mixedAdd(e[k]));c=c.add(f)}return g.fromECJPoint(c)};d.prototype.mulAdd=function(b,c,d){var e=this.precomputed.naf,f=c._getNAFPoints1();c=[e.points,f.points];b=[b.getNAF(e.wnd),d.getNAF(f.wnd)];d=new a(null,null,null);e=[null,null];for(f=Math.max(b[0].length,
b[1].length);0<=f;f--){for(var g=0;0<=f&&(e[0]=b[0][f]|0,e[1]=b[1][f]|0,0===e[0]&&0===e[1]);++g,--f);0<=f&&(g+=1);d=d.dblp(g);if(0>f)break;for(g=0;2>g;g++){var m=e[g],p;0!==m&&(0<m?p=c[g][m>>1]:0>m&&(p=c[g][-m>>1].neg()),d=void 0===p.z?d.mixedAdd(p):d.add(p))}}return d};k.exports=new d},{"./bn":43,"./ecjpoint":45,"./ecpoint":46,"safe-buffer":42}],48:[function(f,k,h){var d=f("safe-buffer").Buffer,e=f("create-hash"),c=f("drbg.js/hmac"),g=f("../messages.json"),a=f("./bn"),b=f("./ecpoint"),m=f("./ecpointg");
h.privateKeyVerify=function(b){b=a.fromBuffer(b);return!(b.isOverflow()||b.isZero())};h.privateKeyExport=function(b,c){var d=a.fromBuffer(b);if(d.isOverflow()||d.isZero())throw Error(g.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return m.mul(d).toPublicKey(c)};h.privateKeyNegate=function(b){b=a.fromBuffer(b);if(b.isZero())return d.alloc(32);0<b.ucmp(a.n)&&b.isub(a.n);return a.n.sub(b).toBuffer()};h.privateKeyModInverse=function(b){b=a.fromBuffer(b);if(b.isOverflow()||b.isZero())throw Error(g.EC_PRIVATE_KEY_RANGE_INVALID);
return b.uinvm().toBuffer()};h.privateKeyTweakAdd=function(b,c){var d=a.fromBuffer(c);if(d.isOverflow())throw Error(g.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);d.iadd(a.fromBuffer(b));d.isOverflow()&&d.isub(a.n);if(d.isZero())throw Error(g.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return d.toBuffer()};h.privateKeyTweakMul=function(b,c){var d=a.fromBuffer(c);if(d.isOverflow()||d.isZero())throw Error(g.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);var e=a.fromBuffer(b);return d.umul(e).ureduce().toBuffer()};h.publicKeyCreate=function(b,
c){var d=a.fromBuffer(b);if(d.isOverflow()||d.isZero())throw Error(g.EC_PUBLIC_KEY_CREATE_FAIL);return m.mul(d).toPublicKey(c)};h.publicKeyConvert=function(a,c){var d=b.fromPublicKey(a);if(null===d)throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);return d.toPublicKey(c)};h.publicKeyVerify=function(a){return null!==b.fromPublicKey(a)};h.publicKeyTweakAdd=function(c,d,e){c=b.fromPublicKey(c);if(null===c)throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);d=a.fromBuffer(d);if(d.isOverflow())throw Error(g.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);
return m.mul(d).add(c).toPublicKey(e)};h.publicKeyTweakMul=function(c,d,e){c=b.fromPublicKey(c);if(null===c)throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);d=a.fromBuffer(d);if(d.isOverflow()||d.isZero())throw Error(g.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return c.mul(d).toPublicKey(e)};h.publicKeyCombine=function(a,c){for(var d=Array(a.length),e=0;e<a.length;++e)if(d[e]=b.fromPublicKey(a[e]),null===d[e])throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);e=d[0];for(var f=1;f<d.length;++f)e=e.add(d[f]);if(e.inf)throw Error(g.EC_PUBLIC_KEY_COMBINE_FAIL);
return e.toPublicKey(c)};h.signatureNormalize=function(b){var c=a.fromBuffer(b.slice(0,32)),e=a.fromBuffer(b.slice(32,64));if(c.isOverflow()||e.isOverflow())throw Error(g.ECDSA_SIGNATURE_PARSE_FAIL);b=d.from(b);e.isHigh()&&a.n.sub(e).toBuffer().copy(b,32);return b};h.signatureExport=function(b){var c=b.slice(0,32);b=b.slice(32,64);if(a.fromBuffer(c).isOverflow()||a.fromBuffer(b).isOverflow())throw Error(g.ECDSA_SIGNATURE_PARSE_FAIL);return{r:c,s:b}};h.signatureImport=function(b){var c=a.fromBuffer(b.r);
c.isOverflow()&&(c=a.fromNumber(0));b=a.fromBuffer(b.s);b.isOverflow()&&(b=a.fromNumber(0));return d.concat([c.toBuffer(),b.toBuffer()])};h.sign=function(b,e,f,h){var n=a.fromBuffer(e);if(n.isOverflow()||n.isZero())throw Error(g.ECDSA_SIGN_FAIL);if(null===f){var p=new c("sha256",e,b,h);f=function(){return p.generate(32)}}for(var t=a.fromBuffer(b),k=0;;++k){var q=f(b,e,null,h,k);if(!d.isBuffer(q)||32!==q.length)throw Error(g.ECDSA_SIGN_FAIL);var x=a.fromBuffer(q);if(!x.isOverflow()&&!x.isZero()){var H=
m.mul(x);q=H.x.fireduce();if(!q.isZero()&&(x=x.uinvm().umul(q.umul(n).ureduce().iadd(t).fireduce()).ureduce(),!x.isZero()))return b=(0!==H.x.ucmp(q)?2:0)|(H.y.isOdd()?1:0),x.isHigh()&&(x=a.n.sub(x),b^=1),{signature:d.concat([q.toBuffer(),x.toBuffer()]),recovery:b}}}};h.verify=function(c,d,e){var f=a.fromBuffer(d.slice(0,32));d=a.fromBuffer(d.slice(32,64));if(f.isOverflow()||d.isOverflow())throw Error(g.ECDSA_SIGNATURE_PARSE_FAIL);if(d.isHigh()||f.isZero()||d.isZero())return!1;e=b.fromPublicKey(e);
if(null===e)throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);d=d.uinvm();c=d.umul(a.fromBuffer(c)).ureduce();d=d.umul(f).ureduce();c=m.mulAdd(c,e,d);if(c.inf)return!1;e=c.z.redSqr();return 0===f.redMul(e).ucmp(c.x)?!0:0<=f.ucmp(a.psn)?!1:0===f.iadd(a.psn).redMul(e).ucmp(c.x)};h.recover=function(c,e,f,h){var n=a.fromBuffer(e.slice(0,32));e=a.fromBuffer(e.slice(32,64));if(n.isOverflow()||e.isOverflow())throw Error(g.ECDSA_SIGNATURE_PARSE_FAIL);do if(!n.isZero()&&!e.isZero()){var p=n;if(f>>1){if(0<=p.ucmp(a.psn))break;
p=n.add(a.n)}p=d.concat([d.from([2+(f&1)]),p.toBuffer()]);p=b.fromPublicKey(p);if(null!==p)return f=n.uinvm(),c=a.n.sub(a.fromBuffer(c)).umul(f).ureduce(),e=e.umul(f).ureduce(),b.fromECJPoint(m.mulAdd(c,p,e)).toPublicKey(h)}while(0);throw Error(g.ECDSA_RECOVER_FAIL);};h.ecdh=function(a,b){var c=h.ecdhUnsafe(a,b,!0);return e("sha256").update(c).digest()};h.ecdhUnsafe=function(c,d,e){c=b.fromPublicKey(c);if(null===c)throw Error(g.EC_PUBLIC_KEY_PARSE_FAIL);d=a.fromBuffer(d);if(d.isOverflow()||d.isZero())throw Error(g.ECDH_FAIL);
return c.mul(d).toPublicKey(e)}},{"../messages.json":49,"./bn":43,"./ecpoint":46,"./ecpointg":47,"create-hash":32,"drbg.js/hmac":36,"safe-buffer":42}],49:[function(f,k,h){k.exports={COMPRESSED_TYPE_INVALID:"compressed should be a boolean",EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid",EC_PRIVATE_KEY_RANGE_INVALID:"private key range is invalid",EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid",
EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format",EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array",EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer",EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid",EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",
EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again",EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid",ECDH_FAIL:"scalar was invalid (zero or overflow)",ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer",ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature",ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature",
ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid",ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",MSG32_TYPE_INVALID:"message should be a Buffer",MSG32_LENGTH_INVALID:"message length is invalid",OPTIONS_TYPE_INVALID:"options should be an Object",OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer",OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function",
RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4",TWEAK_TYPE_INVALID:"tweak should be a Buffer",TWEAK_LENGTH_INVALID:"tweak length is invalid"}},{}],50:[function(f,k,h){function d(c,d){this._block=e.alloc(c);this._finalSize=d;this._blockSize=c;this._len=0}var e=f("safe-buffer").Buffer;d.prototype.update=function(c,d){"string"===typeof c&&(c=e.from(c,d||"utf8"));for(var a=this._block,b=this._blockSize,f=c.length,g=this._len,
h=0;h<f;){for(var n=g%b,k=Math.min(f-h,b-n),Q=0;Q<k;Q++)a[n+Q]=c[h+Q];g+=k;h+=k;0===g%b&&this._update(a)}this._len+=f;return this};d.prototype.digest=function(c){var d=this._len%this._blockSize;this._block[d]=128;this._block.fill(0,d+1);d>=this._finalSize&&(this._update(this._block),this._block.fill(0));d=8*this._len;if(4294967295>=d)this._block.writeUInt32BE(d,this._blockSize-4);else{var a=(d&4294967295)>>>0;this._block.writeUInt32BE((d-a)/4294967296,this._blockSize-8);this._block.writeUInt32BE(a,
this._blockSize-4)}this._update(this._block);d=this._hash();return c?d.toString(c):d};d.prototype._update=function(){throw Error("_update must be implemented by subclass");};k.exports=d},{"safe-buffer":42}],51:[function(f,k,h){h=k.exports=function(d){d=d.toLowerCase();var e=h[d];if(!e)throw Error(d+" is not supported (we accept pull requests)");return new e};h.sha=f("./sha");h.sha1=f("./sha1");h.sha224=f("./sha224");h.sha256=f("./sha256");h.sha384=f("./sha384");h.sha512=f("./sha512")},{"./sha":52,
"./sha1":53,"./sha224":54,"./sha256":55,"./sha384":56,"./sha512":57}],52:[function(f,k,h){function d(){this.init();this._w=a;e.call(this,64,56)}h=f("inherits");var e=f("./hash"),c=f("safe-buffer").Buffer,g=[1518500249,1859775393,-1894007588,-899497514],a=Array(80);h(d,e);d.prototype.init=function(){this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878;this._e=3285377520;return this};d.prototype._update=function(a){for(var b=this._w,c=this._a|0,d=this._b|0,e=this._c|0,f=this._d|
0,h=this._e|0,k=0;16>k;++k)b[k]=a.readInt32BE(4*k);for(;80>k;++k)b[k]=b[k-3]^b[k-8]^b[k-14]^b[k-16];for(a=0;80>a;++a){k=~~(a/20);var v=c<<5|c>>>27;var B=0===k?d&e|~d&f:2===k?d&e|d&f|e&f:d^e^f;k=v+B+h+b[a]+g[k]|0;h=f;f=e;e=d<<30|d>>>2;d=c;c=k}this._a=c+this._a|0;this._b=d+this._b|0;this._c=e+this._c|0;this._d=f+this._d|0;this._e=h+this._e|0};d.prototype._hash=function(){var a=c.allocUnsafe(20);a.writeInt32BE(this._a|0,0);a.writeInt32BE(this._b|0,4);a.writeInt32BE(this._c|0,8);a.writeInt32BE(this._d|
0,12);a.writeInt32BE(this._e|0,16);return a};k.exports=d},{"./hash":50,inherits:39,"safe-buffer":42}],53:[function(f,k,h){function d(){this.init();this._w=a;e.call(this,64,56)}h=f("inherits");var e=f("./hash"),c=f("safe-buffer").Buffer,g=[1518500249,1859775393,-1894007588,-899497514],a=Array(80);h(d,e);d.prototype.init=function(){this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878;this._e=3285377520;return this};d.prototype._update=function(a){for(var b=this._w,c=this._a|0,
d=this._b|0,e=this._c|0,f=this._d|0,h=this._e|0,k=0;16>k;++k)b[k]=a.readInt32BE(4*k);for(;80>k;++k)a=b[k-3]^b[k-8]^b[k-14]^b[k-16],b[k]=a<<1|a>>>31;for(k=0;80>k;++k){a=~~(k/20);var v=c<<5|c>>>27;var B=0===a?d&e|~d&f:2===a?d&e|d&f|e&f:d^e^f;a=v+B+h+b[k]+g[a]|0;h=f;f=e;e=d<<30|d>>>2;d=c;c=a}this._a=c+this._a|0;this._b=d+this._b|0;this._c=e+this._c|0;this._d=f+this._d|0;this._e=h+this._e|0};d.prototype._hash=function(){var a=c.allocUnsafe(20);a.writeInt32BE(this._a|0,0);a.writeInt32BE(this._b|0,4);a.writeInt32BE(this._c|
0,8);a.writeInt32BE(this._d|0,12);a.writeInt32BE(this._e|0,16);return a};k.exports=d},{"./hash":50,inherits:39,"safe-buffer":42}],54:[function(f,k,h){function d(){this.init();this._w=a;c.call(this,64,56)}h=f("inherits");var e=f("./sha256"),c=f("./hash"),g=f("safe-buffer").Buffer,a=Array(64);h(d,e);d.prototype.init=function(){this._a=3238371032;this._b=914150663;this._c=812702999;this._d=4144912697;this._e=4290775857;this._f=1750603025;this._g=1694076839;this._h=3204075428;return this};d.prototype._hash=
function(){var a=g.allocUnsafe(28);a.writeInt32BE(this._a,0);a.writeInt32BE(this._b,4);a.writeInt32BE(this._c,8);a.writeInt32BE(this._d,12);a.writeInt32BE(this._e,16);a.writeInt32BE(this._f,20);a.writeInt32BE(this._g,24);return a};k.exports=d},{"./hash":50,"./sha256":55,inherits:39,"safe-buffer":42}],55:[function(f,k,h){function d(){this.init();this._w=a;e.call(this,64,56)}h=f("inherits");var e=f("./hash"),c=f("safe-buffer").Buffer,g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,
2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,
1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=Array(64);h(d,e);d.prototype.init=function(){this._a=1779033703;this._b=3144134277;this._c=1013904242;this._d=2773480762;this._e=1359893119;this._f=2600822924;this._g=528734635;this._h=1541459225;return this};d.prototype._update=function(a){for(var b=this._w,c=this._a|0,d=this._b|0,e=this._c|0,f=this._d|0,h=this._e|0,k=this._f|0,v=this._g|0,B=this._h|0,z=0;16>z;++z)b[z]=a.readInt32BE(4*
z);for(;64>z;++z){a=b[z-2];var x=b[z-15];b[z]=((a>>>17|a<<15)^(a>>>19|a<<13)^a>>>10)+b[z-7]+((x>>>7|x<<25)^(x>>>18|x<<14)^x>>>3)+b[z-16]|0}for(z=0;64>z;++z)a=B+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(v^h&(k^v))+g[z]+b[z]|0,x=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&d|e&(c|d))|0,B=v,v=k,k=h,h=f+a|0,f=e,e=d,d=c,c=a+x|0;this._a=c+this._a|0;this._b=d+this._b|0;this._c=e+this._c|0;this._d=f+this._d|0;this._e=h+this._e|0;this._f=k+this._f|0;this._g=v+this._g|0;this._h=B+this._h|0};d.prototype._hash=
function(){var a=c.allocUnsafe(32);a.writeInt32BE(this._a,0);a.writeInt32BE(this._b,4);a.writeInt32BE(this._c,8);a.writeInt32BE(this._d,12);a.writeInt32BE(this._e,16);a.writeInt32BE(this._f,20);a.writeInt32BE(this._g,24);a.writeInt32BE(this._h,28);return a};k.exports=d},{"./hash":50,inherits:39,"safe-buffer":42}],56:[function(f,k,h){function d(){this.init();this._w=a;c.call(this,128,112)}h=f("inherits");var e=f("./sha512"),c=f("./hash"),g=f("safe-buffer").Buffer,a=Array(160);h(d,e);d.prototype.init=
function(){this._ah=3418070365;this._bh=1654270250;this._ch=2438529370;this._dh=355462360;this._eh=1731405415;this._fh=2394180231;this._gh=3675008525;this._hh=1203062813;this._al=3238371032;this._bl=914150663;this._cl=812702999;this._dl=4144912697;this._el=4290775857;this._fl=1750603025;this._gl=1694076839;this._hl=3204075428;return this};d.prototype._hash=function(){function a(a,b,d){c.writeInt32BE(a,d);c.writeInt32BE(b,d+4)}var c=g.allocUnsafe(48);a(this._ah,this._al,0);a(this._bh,this._bl,8);a(this._ch,
this._cl,16);a(this._dh,this._dl,24);a(this._eh,this._el,32);a(this._fh,this._fl,40);return c};k.exports=d},{"./hash":50,"./sha512":57,inherits:39,"safe-buffer":42}],57:[function(f,k,h){function d(){this.init();this._w=b;c.call(this,128,112)}function e(a,b){return a>>>0<b>>>0?1:0}h=f("inherits");var c=f("./hash"),g=f("safe-buffer").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,
3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,
338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,
2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,
1607167915,987167468,1816402316,1246189591],b=Array(160);h(d,c);d.prototype.init=function(){this._ah=1779033703;this._bh=3144134277;this._ch=1013904242;this._dh=2773480762;this._eh=1359893119;this._fh=2600822924;this._gh=528734635;this._hh=1541459225;this._al=4089235720;this._bl=2227873595;this._cl=4271175723;this._dl=1595750129;this._el=2917565137;this._fl=725511199;this._gl=4215389547;this._hl=327033209;return this};d.prototype._update=function(b){for(var c=this._w,d=this._ah|0,f=this._bh|0,g=this._ch|
0,h=this._dh|0,k=this._eh|0,m=this._fh|0,B=this._gh|0,z=this._hh|0,x=this._al|0,H=this._bl|0,F=this._cl|0,G=this._dl|0,C=this._el|0,A=this._fl|0,E=this._gl|0,K=this._hl|0,D=0;32>D;D+=2)c[D]=b.readInt32BE(4*D),c[D+1]=b.readInt32BE(4*D+4);for(;160>D;D+=2){b=c[D-30];var I=c[D-30+1],J=(b>>>1|I<<31)^(b>>>8|I<<24)^b>>>7,y=(I>>>1|b<<31)^(I>>>8|b<<24)^(I>>>7|b<<25);b=c[D-4];I=c[D-4+1];var L=(b>>>19|I<<13)^(I>>>29|b<<3)^b>>>6;I=(I>>>19|b<<13)^(b>>>29|I<<3)^(I>>>6|b<<26);var w=c[D-32],M=c[D-32+1];b=y+c[D-14+
1]|0;J=J+c[D-14]+e(b,y)|0;b=b+I|0;J=J+L+e(b,I)|0;b=b+M|0;J=J+w+e(b,M)|0;c[D]=J;c[D+1]=b}for(D=0;160>D;D+=2){J=c[D];b=c[D+1];I=d&f|g&(d|f);var l=x&H|F&(x|H);w=(d>>>28|x<<4)^(x>>>2|d<<30)^(x>>>7|d<<25);M=(x>>>28|d<<4)^(d>>>2|x<<30)^(d>>>7|x<<25);var T=a[D],O=a[D+1],U=B^k&(m^B),P=E^C&(A^E);L=K+((C>>>14|k<<18)^(C>>>18|k<<14)^(k>>>9|C<<23))|0;y=z+((k>>>14|C<<18)^(k>>>18|C<<14)^(C>>>9|k<<23))+e(L,K)|0;L=L+P|0;y=y+U+e(L,P)|0;L=L+O|0;y=y+T+e(L,O)|0;L=L+b|0;y=y+J+e(L,b)|0;b=M+l|0;J=w+I+e(b,M)|0;z=B;K=E;B=
m;E=A;m=k;A=C;C=G+L|0;k=h+y+e(C,G)|0;h=g;G=F;g=f;F=H;f=d;H=x;x=L+b|0;d=y+J+e(x,L)|0}this._al=this._al+x|0;this._bl=this._bl+H|0;this._cl=this._cl+F|0;this._dl=this._dl+G|0;this._el=this._el+C|0;this._fl=this._fl+A|0;this._gl=this._gl+E|0;this._hl=this._hl+K|0;this._ah=this._ah+d+e(this._al,x)|0;this._bh=this._bh+f+e(this._bl,H)|0;this._ch=this._ch+g+e(this._cl,F)|0;this._dh=this._dh+h+e(this._dl,G)|0;this._eh=this._eh+k+e(this._el,C)|0;this._fh=this._fh+m+e(this._fl,A)|0;this._gh=this._gh+B+e(this._gl,
E)|0;this._hh=this._hh+z+e(this._hl,K)|0};d.prototype._hash=function(){function a(a,c,d){b.writeInt32BE(a,d);b.writeInt32BE(c,d+4)}var b=g.allocUnsafe(64);a(this._ah,this._al,0);a(this._bh,this._bl,8);a(this._ch,this._cl,16);a(this._dh,this._dl,24);a(this._eh,this._el,32);a(this._fh,this._fl,40);a(this._gh,this._gl,48);a(this._hh,this._hl,56);return b};k.exports=d},{"./hash":50,inherits:39,"safe-buffer":42}]},{},[30]);

1061
Source/SITE/JS/typedarray.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="131px" height="31px" viewBox="0 0 131 31" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title>TeraLogoName (1)</title>
<desc>Created with Sketch.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Main" transform="translate(-48.000000, -15.000000)" fill="#FFFFFF">
<g id="TeraLogoName-(1)" transform="translate(48.000000, 14.000000)">
<path d="M121.933224,25.577 L115.296224,9.886 C114.718654,10.827148 114.190603,11.7978018 113.714224,12.794 C112.496224,15.811 111.369224,18.863 110.174224,21.885 C109.452224,23.702 105.224224,24.64 103.923224,23.185 C103.50461,22.549609 103.402756,21.7565519 103.647224,21.036 C106.242558,14.7893333 108.914891,8.57366667 111.664224,2.389 C112.081795,1.73171922 112.768428,1.29250803 113.540224,1.189 C118.232224,0.701 118.114224,0.789 119.954224,5.294 C122.643224,11.876 125.532224,18.377 128.331224,24.914 C128.857224,26.142 129.422224,27.357 129.868224,28.614 C130.634224,30.763 129.839224,31.901 127.554224,31.914 C122.354224,31.941 117.162224,31.923 111.965224,31.923 C109.104224,31.923 106.242224,31.898 103.381224,31.932 C101.774224,31.951 100.181224,31.806 99.9882245,29.845 C99.8212245,28.16 102.111224,25.707 103.610224,25.702 C108.810224,25.682 114.002224,25.702 119.199224,25.691 C119.990224,25.703 120.780224,25.629 121.933224,25.577 Z" id="Path_3"></path>
<path d="M85.8012944,19.968 C87.7252944,22.968 89.5382944,25.777 91.3442944,28.595 C92.5112944,30.416 92.0862944,31.295 89.9382944,31.484 C87.5382944,31.684 85.4752944,31.595 84.2822944,28.791 C83.1694362,26.5136094 81.8142711,24.3628464 80.2402944,22.376 C79.7236248,21.6893743 78.9628598,21.2275452 78.1152944,21.086 C71.7712944,20.486 71.7672944,20.52 71.7682944,26.864 L71.7682944,28.439 C71.7682944,31.439 71.5962944,31.539 68.6072944,31.529 C66.9742944,31.523 66.0582944,31.007 66.0572944,29.262 C66.0572944,25.426 65.9462944,21.588 66.0332944,17.762 C66.0892944,15.268 66.7062944,14.804 69.2102944,14.8 C73.1292944,14.8 77.0402944,14.809 80.9542944,14.8 C83.0102944,14.791 85.1262944,13.34 85.4542944,11.757 C85.8352944,9.883 84.6202944,7.925 82.2172944,7.307 C80.2452764,6.88611632 78.2337044,6.67858914 76.2172944,6.688 C73.4362944,6.588 70.6472944,6.608 67.8632944,6.68 C65.5712944,6.738 66.1032944,4.953 66.0932944,3.824 C66.0882944,2.78 65.6532944,1.117 67.7932944,1.136 C72.8362944,1.194 77.8932944,0.908 82.9202944,1.207 C88.6302944,1.541 92.7212944,7.859 91.2402944,12.898 C90.54985,15.9373243 88.5619669,18.5213165 85.8012944,19.968 Z" id="Path_4"></path>
<g id="Group" transform="translate(34.000000, 1.000000)">
<path d="M11.93,24.709 C14.936,24.709 17.944,24.751 20.949,24.691 C22.526,24.661 23.526,24.954 23.531,26.878 C23.54,30.078 23.25,30.826 21.081,30.905 C18.081,31.012 15.069,30.937 12.063,30.937 C9.131,30.937 6.199,30.97 3.269,30.926 C0.915,30.892 0.251,29.926 0.169,27.26 C0.103,25.031 1.269,24.64 3.134,24.694 C6.066,24.771 8.999,24.709 11.93,24.709 Z" id="Path_6"></path>
<path d="M12.066,0.151 C15.076,0.151 18.092,0.246 21.097,0.116 C22.897,0.038 23.653,0.462 23.542,2.447 C23.342,6.026 23.995,5.636 20.216,5.647 C14.416,5.666 8.625,5.605 2.83,5.68 C0.884,5.705 0.164,4.969 0.161,3.025 C0.158,1.081 0.63,0.044 2.81,0.125 C5.895,0.233 8.98,0.151 12.066,0.151 Z" id="Path_7"></path>
<path d="M11.288,12.438 C14.069,12.438 16.851,12.509 19.632,12.413 C21.599,12.345 22.091,13.519 22.124,15.068 C22.157,16.681 21.745,18.16 19.732,18.176 C14.0206667,18.2206667 8.309,18.2206667 2.597,18.176 C0.254,18.16 0.167,16.507 0.177,14.708 C0.187,12.909 1.077,12.394 2.719,12.423 C5.575,12.482 8.432,12.438 11.288,12.438 Z" id="Path_8"></path>
</g>
<g id="Group-2" transform="translate(0.000000, 1.000000)">
<path d="M17.758,0.152 C19.715,0.152 21.677,0.22 23.627,0.136 C25.979,0.036 25.527,1.843 25.608,3.093 C25.693,4.323 25.708,5.763 23.703,5.672 C21.826,5.586 19.939,5.715 18.061,5.639 C16.312,5.567 15.701,6.248 15.725,8.034 C15.812,14.734 15.71,21.434 15.791,28.126 C15.815,30.126 15.204,31.041 13.091,30.968 C10.479,30.877 9.551,30.268 9.551,28.023 C9.523,19.67 9.544,11.314 9.538,2.964 C9.533,1.079 10.223,-0.01 12.342,0.13 C14.14,0.244 15.953,0.152 17.758,0.152 Z" id="Path_5"></path>
<path d="M3.577,5.653 C0.029,5.653 0.029,5.653 0.003,3.202 C-0.026,0.344 0.156,0.167 3.07,0.153 L4.197,0.153 C6.916,0.153 7.115,0.345 7.159,2.993 C7.209,5.473 6.963,5.654 3.577,5.653 Z" id="Path_9"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="131px" height="31px" viewBox="0 0 131 31" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title>Tera_Text</title>
<desc>Created with Sketch.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.3">
<g id="Tera_Text.svg" transform="translate(-38.000000, -51.000000)" fill="#000000">
<g id="Tera_Text" transform="translate(38.000000, 50.000000)">
<path d="M121.933224,25.577 L115.296224,9.886 C114.718654,10.827148 114.190603,11.7978018 113.714224,12.794 C112.496224,15.811 111.369224,18.863 110.174224,21.885 C109.452224,23.702 105.224224,24.64 103.923224,23.185 C103.50461,22.549609 103.402756,21.7565519 103.647224,21.036 C106.242558,14.7893333 108.914891,8.57366667 111.664224,2.389 C112.081795,1.73171922 112.768428,1.29250803 113.540224,1.189 C118.232224,0.701 118.114224,0.789 119.954224,5.294 C122.643224,11.876 125.532224,18.377 128.331224,24.914 C128.857224,26.142 129.422224,27.357 129.868224,28.614 C130.634224,30.763 129.839224,31.901 127.554224,31.914 C122.354224,31.941 117.162224,31.923 111.965224,31.923 C109.104224,31.923 106.242224,31.898 103.381224,31.932 C101.774224,31.951 100.181224,31.806 99.9882245,29.845 C99.8212245,28.16 102.111224,25.707 103.610224,25.702 C108.810224,25.682 114.002224,25.702 119.199224,25.691 C119.990224,25.703 120.780224,25.629 121.933224,25.577 Z" id="Path_3"></path>
<path d="M85.8012944,19.968 C87.7252944,22.968 89.5382944,25.777 91.3442944,28.595 C92.5112944,30.416 92.0862944,31.295 89.9382944,31.484 C87.5382944,31.684 85.4752944,31.595 84.2822944,28.791 C83.1694362,26.5136094 81.8142711,24.3628464 80.2402944,22.376 C79.7236248,21.6893743 78.9628598,21.2275452 78.1152944,21.086 C71.7712944,20.486 71.7672944,20.52 71.7682944,26.864 L71.7682944,28.439 C71.7682944,31.439 71.5962944,31.539 68.6072944,31.529 C66.9742944,31.523 66.0582944,31.007 66.0572944,29.262 C66.0572944,25.426 65.9462944,21.588 66.0332944,17.762 C66.0892944,15.268 66.7062944,14.804 69.2102944,14.8 C73.1292944,14.8 77.0402944,14.809 80.9542944,14.8 C83.0102944,14.791 85.1262944,13.34 85.4542944,11.757 C85.8352944,9.883 84.6202944,7.925 82.2172944,7.307 C80.2452764,6.88611632 78.2337044,6.67858914 76.2172944,6.688 C73.4362944,6.588 70.6472944,6.608 67.8632944,6.68 C65.5712944,6.738 66.1032944,4.953 66.0932944,3.824 C66.0882944,2.78 65.6532944,1.117 67.7932944,1.136 C72.8362944,1.194 77.8932944,0.908 82.9202944,1.207 C88.6302944,1.541 92.7212944,7.859 91.2402944,12.898 C90.54985,15.9373243 88.5619669,18.5213165 85.8012944,19.968 Z" id="Path_4"></path>
<g id="Group" transform="translate(34.000000, 1.000000)">
<path d="M11.93,24.709 C14.936,24.709 17.944,24.751 20.949,24.691 C22.526,24.661 23.526,24.954 23.531,26.878 C23.54,30.078 23.25,30.826 21.081,30.905 C18.081,31.012 15.069,30.937 12.063,30.937 C9.131,30.937 6.199,30.97 3.269,30.926 C0.915,30.892 0.251,29.926 0.169,27.26 C0.103,25.031 1.269,24.64 3.134,24.694 C6.066,24.771 8.999,24.709 11.93,24.709 Z" id="Path_6"></path>
<path d="M12.066,0.151 C15.076,0.151 18.092,0.246 21.097,0.116 C22.897,0.038 23.653,0.462 23.542,2.447 C23.342,6.026 23.995,5.636 20.216,5.647 C14.416,5.666 8.625,5.605 2.83,5.68 C0.884,5.705 0.164,4.969 0.161,3.025 C0.158,1.081 0.63,0.044 2.81,0.125 C5.895,0.233 8.98,0.151 12.066,0.151 Z" id="Path_7"></path>
<path d="M11.288,12.438 C14.069,12.438 16.851,12.509 19.632,12.413 C21.599,12.345 22.091,13.519 22.124,15.068 C22.157,16.681 21.745,18.16 19.732,18.176 C14.0206667,18.2206667 8.309,18.2206667 2.597,18.176 C0.254,18.16 0.167,16.507 0.177,14.708 C0.187,12.909 1.077,12.394 2.719,12.423 C5.575,12.482 8.432,12.438 11.288,12.438 Z" id="Path_8"></path>
</g>
<g id="Group-2" transform="translate(0.000000, 1.000000)">
<path d="M17.758,0.152 C19.715,0.152 21.677,0.22 23.627,0.136 C25.979,0.036 25.527,1.843 25.608,3.093 C25.693,4.323 25.708,5.763 23.703,5.672 C21.826,5.586 19.939,5.715 18.061,5.639 C16.312,5.567 15.701,6.248 15.725,8.034 C15.812,14.734 15.71,21.434 15.791,28.126 C15.815,30.126 15.204,31.041 13.091,30.968 C10.479,30.877 9.551,30.268 9.551,28.023 C9.523,19.67 9.544,11.314 9.538,2.964 C9.533,1.079 10.223,-0.01 12.342,0.13 C14.14,0.244 15.953,0.152 17.758,0.152 Z" id="Path_5"></path>
<path d="M3.577,5.653 C0.029,5.653 0.029,5.653 0.003,3.202 C-0.026,0.344 0.156,0.167 3.07,0.153 L4.197,0.153 C6.916,0.153 7.115,0.345 7.159,2.993 C7.209,5.473 6.963,5.654 3.577,5.653 Z" id="Path_9"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<g id="Layer_2_1_">
<g id="Layer_1-2">
<image style="overflow:visible;opacity:0.75;enable-background:new ;" width="6720" height="5550" xlink:href="4F2870EA.png" transform="matrix(3.663664e-02 0 0 3.663664e-02 4.9009 26.3333)">
</image>
<path class="st0" d="M77.8,225c3.3-5.5,6.5-10.7,9.6-15.9c14.9-24.5,29.8-48.9,44.7-73.4c1.6-2.6,1.6-4.9,0-7.6
c-10.5-17-20.8-34.1-31.2-51.2c-1.5-2.4-1.4-4.4,0-6.8c8.2-13.3,16.3-26.6,24.4-39.9c1.4-2.3,2-2.3,3.4,0.2
c8.2,13.5,16.4,27,24.6,40.5c23.6,38.8,47.1,77.7,70.7,116.5c7.2,11.9,14.5,23.8,21.7,35.8c0.3,0.5,0.6,1.1,1.1,1.8
c-1.4,0.1-2.5,0.3-3.7,0.3c-16.4,0-32.9,0-49.3,0.1c-2.3,0-3.8-0.9-4.9-2.8c-7.9-13.1-15.8-26.2-23.7-39.3
c-0.9-1.4-1.9-2.8-3-4.4c-1.8,3-3.4,5.6-5.1,8.3c-7.2,11.8-14.3,23.7-21.5,35.5c-1.1,1.9-2.5,2.7-4.7,2.6
c-16.5-0.1-33,0-49.5-0.1C80.4,225.3,79.3,225.2,77.8,225z"/>
<path class="st0" d="M89.7,88.9c0.8,1,1.6,1.8,2.1,2.7c8.2,13.5,16.4,27.1,24.6,40.6c1.2,2,1.2,3.8-0.1,5.8
c-17.1,28.1-34.1,56.2-51.1,84.3c-1.3,2.2-2.8,3.1-5.4,3.1c-16.5-0.1-33.1-0.1-49.6-0.1c-0.9,0-1.9-0.1-3.2-0.2
C34.6,179.7,62,134.5,89.7,88.9z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024px" height="266px" viewBox="0 0 1024 266" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title>Rectangle</title>
<desc>Created with Sketch.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Main" transform="translate(0.000000, -2724.000000)" fill="#354154" fill-rule="nonzero">
<g id="Group-9" transform="translate(0.000000, 2724.000000)">
<path d="M0,80.4353478 C306.913158,27.3996705 477.579825,0.881831785 512,0.881831785 C546.420175,0.881831785 717.086842,27.3996705 1024,80.4353478 L1024,266 L0,266 L0,80.4353478 Z" id="Rectangle"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 865 B

BIN
Source/SITE/PIC/dapp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More