{
  "contractName": "Agent",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "ADD_PROTECTED_TOKEN_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ERC1271_INTERFACE_ID",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_operator",
          "type": "address"
        },
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ERC1271_RETURN_INVALID_SIGNATURE",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "TRANSFER_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getProtectedTokensLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "RUN_SCRIPT_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SAFE_EXECUTE_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "REMOVE_PROTECTED_TOKEN_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isDepositable",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_hash",
          "type": "bytes32"
        }
      ],
      "name": "presignHash",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DESIGNATE_SIGNER_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "removeProtectedToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EXECUTE_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "addProtectedToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "protectedTokens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ERC1271_RETURN_VALID_SIGNATURE",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_designatedSigner",
          "type": "address"
        }
      ],
      "name": "setDesignatedSigner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "designatedSigner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_target",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeExecute",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PROTECTED_TOKENS_CAP",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADD_PRESIGNED_HASH_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "isPresigned",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_target",
          "type": "address"
        },
        {
          "name": "_ethValue",
          "type": "uint256"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_evmScript",
          "type": "bytes"
        }
      ],
      "name": "canForward",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_evmScript",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "balance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isForwarder",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "SafeExecute",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "ethValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Execute",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        }
      ],
      "name": "AddProtectedToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        }
      ],
      "name": "RemoveProtectedToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "PresignHash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "oldSigner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newSigner",
          "type": "address"
        }
      ],
      "name": "SetDesignatedSigner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ReceiveERC721",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "VaultDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "vault",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RecoverToVault",
      "type": "event"
    }
  ],
  "bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062004d37833981519152640100000000620035046200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b506200023060008051602062004d3783398151915282640100000000620047e26200023782021704565b50565b5490565b9055565b614aec806200024b6000396000f3006080604052600436106102235763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416627bb00381146103af57806301ffc9a7146103d65780630803fac01461042457806311a5e40914610439578063150b7a02146104835780631626ba7e146104c95780631ce3018114610527578063206b60f91461053c57806320c13b0b1461055157806326f06d24146105e85780632914b9bd146105fd57806332f0a3b51461067f578063368c3c34146106945780633e4eb756146106a957806342b2d066146106be57806347e7ef24146106d357806348a0c8dd146106f75780634c7ec0b01461070c57806354842f1414610724578063578eb50b146107395780635fa5e4e6146107675780636298e9021461077c5780637e7db6e1146107aa57806380afdea8146107d85780638129fc1c146107ed578063851a3790146108025780638b3dd7491461081a5780639890cdca1461082f5780639d4941d814610844578063a1658fad14610872578063a479e508146108e6578063a83e52b4146108fb578063aae2505114610929578063ab23c3451461093e578063b03bdb0414610978578063b06c42441461098d578063b4fa653c146109a2578063b61d27f6146109ba578063beabacc8146109f8578063c0774df314610a2f578063d4aae0c414610aa3578063d948d46814610ab8578063de4796ed14610b11578063e3d670d714610b26578063fd64eccb14610b54575b61022b610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515610304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102c95781810151838201526020016102b1565b50505050905090810190601f1680156102f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051808201909152601381527f5641554c545f444154415f4e4f4e5f5a45524f00000000000000000000000000602082015236156103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506103ad600034610b93565b005b3480156103bb57600080fd5b506103c4610eb2565b60408051918252519081900360200190f35b3480156103e257600080fd5b506104107fffffffff0000000000000000000000000000000000000000000000000000000060043516610ed6565b604080519115158252519081900360200190f35b34801561043057600080fd5b50610410610b69565b34801561044557600080fd5b5061044e610fbd565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561048f57600080fd5b5061044e73ffffffffffffffffffffffffffffffffffffffff60048035821691602480359091169160443591606435908101910135610fe1565b3480156104d557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261044e9583359536956044949193909101919081908401838280828437509497506110ab9650505050505050565b34801561053357600080fd5b5061044e611137565b34801561054857600080fd5b506103c461113c565b34801561055d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044e94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506111719650505050505050565b3480156105f457600080fd5b506103c46111e0565b34801561060957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526106569436949293602493928401919081908401838280828437509497506112909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561068b57600080fd5b5061065661139c565b3480156106a057600080fd5b506103c461143a565b3480156106b557600080fd5b506103c461145e565b3480156106ca57600080fd5b506103c4611482565b6103ad73ffffffffffffffffffffffffffffffffffffffff600435166024356114a6565b34801561070357600080fd5b5061041061155a565b34801561071857600080fd5b506103ad60043561158a565b34801561073057600080fd5b506103c46116c3565b34801561074557600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff600435166116e7565b34801561077357600080fd5b506103c461186f565b34801561078857600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516611893565b3480156107b657600080fd5b5061041073ffffffffffffffffffffffffffffffffffffffff60043516611b5e565b3480156107e457600080fd5b506103c4611b64565b3480156107f957600080fd5b506103ad611b8f565b34801561080e57600080fd5b50610656600435611c48565b34801561082657600080fd5b506103c4611c7d565b34801561083b57600080fd5b5061044e611ca8565b34801561085057600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516611ccc565b34801561087e57600080fd5b50604080516020600460443581810135838102808601850190965280855261041095833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750611fee9650505050505050565b3480156108f257600080fd5b5061065661217e565b34801561090757600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516612240565b34801561093557600080fd5b50610656612445565b34801561094a57600080fd5b506103ad6004803573ffffffffffffffffffffffffffffffffffffffff169060248035908101910135612461565b34801561098457600080fd5b506103c4612ac8565b34801561099957600080fd5b506103c4612acd565b3480156109ae57600080fd5b50610410600435612af1565b3480156109c657600080fd5b506103ad6004803573ffffffffffffffffffffffffffffffffffffffff16906024803591604435918201910135612b06565b348015610a0457600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435612d1c565b348015610a3b57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261041095833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506130c79650505050505050565b348015610aaf57600080fd5b50610656613104565b348015610ac457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103ad94369492936024939284019190819084018382808284375094975061312f9650505050505050565b348015610b1d57600080fd5b50610410613209565b348015610b3257600080fd5b506103c473ffffffffffffffffffffffffffffffffffffffff6004351661323a565b348015610b6057600080fd5b5061041061328e565b600080610b74611c7d565b90508015801590610b8c575080610b89613293565b10155b91505b5090565b610b9b61155a565b60408051808201909152601581527f5641554c545f4e4f545f4445504f53495441424c4500000000000000000000006020820152901515610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601881527f5641554c545f4445504f5349545f56414c55455f5a45524f0000000000000000602082015260008211610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff82161515610d985760408051808201909152601481527f5641554c545f56414c55455f4d49534d415443480000000000000000000000006020820152348214610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50610e61565b610dc073ffffffffffffffffffffffffffffffffffffffff831633308463ffffffff61329716565b6040805190810160405280602081526020017f5641554c545f544f4b454e5f5452414e534645525f46524f4d5f524556455254815250901515610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b604080518281529051339173ffffffffffffffffffffffffffffffffffffffff8516917f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e9181900360200190a35050565b7f6eb2a499556bfa2872f5aa15812b956cc4a71b4d64eb3553f7073c7e41415aaa81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167ffb855dc9000000000000000000000000000000000000000000000000000000001480610f6957507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80610fb557507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b90505b919050565b7ffb855dc90000000000000000000000000000000000000000000000000000000081565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe0d2ab3bf6896c073bb33b920a9b60f3c8207b3cc3b7561c3101cb081a8f0883878787604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a4507f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b600082815260208190526040812054819060ff16156110d5576110ce6001613338565b9150611130565b60015473ffffffffffffffffffffffffffffffffffffffff1615156110fc57506000611124565b60015461112190859073ffffffffffffffffffffffffffffffffffffffff168561336d565b90505b61112d81613338565b91505b5092915050565b600081565b604080517f5452414e534645525f524f4c45000000000000000000000000000000000000008152905190819003600d01902081565b60006111d9836040518082805190602001908083835b602083106111a65780518252601f199092019160209182019101611187565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836110ab565b9392505050565b60006111ea610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515611287576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50506002545b90565b600061129a61217e565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561131e578181015183820152602001611306565b50505050905090810190601f16801561134b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b505050506040513d602081101561139457600080fd5b505192915050565b60006113a6613104565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b5051905090565b7fb421f7ad7646747f3051c50c0b8e2377839296cd4973e27f63821d73e390338f81565b7f0a1ad7b87f5846153c6d5a1f761d71c7d0cfd122384f56066cd33239b793369481565b7f71eee93d500f6f065e38b27d242a756466a00a52a1dbcd6b4260f01a8640402a81565b6114ae610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561154b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506115568282610b93565b5050565b60006115857f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea613504565b905090565b7f0b29780bb523a130b3b01f231ef49ed2fa2781645591a0b0a44ca98f15a5994c6115b482613508565b6115bf338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060008381526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551849133917fb150212e573caa2a0216cf8f273ef996af143fd7b2d35abd92c8105536cac1609190a3505050565b7f23ce341656c3f14df6692eebd4757791e33662b7dcf9970c8308303da5472b7c81565b7f71eee93d500f6f065e38b27d242a756466a00a52a1dbcd6b4260f01a8640402a61171182613513565b61171c338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156117b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506117c383613534565b60408051808201909152601981527f4147454e545f544f4b454e5f4e4f545f50524f544543544544000000000000006020820152901515611860576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061186a836135ac565b505050565b7fcebf517aa4440d1d125e0355aae64401211d0848a23c02cc5d29a14822580ba481565b7f6eb2a499556bfa2872f5aa15812b956cc4a71b4d64eb3553f7073c7e41415aaa6118bd82613513565b6118c8338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611965576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060025460408051808201909152601881527f4147454e545f544f4b454e535f4341505f524541434845440000000000000000602082015290600a11611a07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611a11836136d7565b60408051808201909152601581527f4147454e545f544f4b454e5f4e4f545f455243323000000000000000000000006020820152901515611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611ab883613534565b60408051808201909152601d81527f4147454e545f544f4b454e5f414c52454144595f50524f54454354454400000060208201529015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061186a83613702565b50600090565b60006115857fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b613504565b611b97611c7d565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611c3c61379f565b611c46600161387c565b565b6002805482908110611c5657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60006115857febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e613504565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b6000806000611cda84611b5e565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611d8061139c565b9250611d8b836138b3565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff84161515611e93576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611e8d573d6000803e3d6000fd5b50611f83565b5082611ebb73ffffffffffffffffffffffffffffffffffffffff82163063ffffffff6138e616565b9150611ee473ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff613a1f16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611ff9610b69565b15156120085760009150612176565b612010613104565b905073ffffffffffffffffffffffffffffffffffffffff811615156120385760009150612176565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761206088613ab7565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156120f85781810151838201526020016120e0565b50505050905090810190601f1680156121255780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b505050506040513d602081101561217157600080fd5b505191505b509392505050565b600080612189613104565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561136a57600080fd5b60007f23ce341656c3f14df6692eebd4757791e33662b7dcf9970c8308303da5472b7c61226c83613513565b612277338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612314576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601881527f4147454e545f44455349474e415445445f544f5f53454c460000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff85163014156123c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506001805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169450849033907f3ecf54ed9acd859c5ee7f080794267b8f08b65d2446d816cef1efccd6d00d73590600090a450505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000806000807f0a1ad7b87f5846153c6d5a1f761d71c7d0cfd122384f56066cd33239b79336946001026124f58d6124d08e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843750613ac1945050505050565b7c01000000000000000000000000000000000000000000000000000000009004613ada565b612500338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561259d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600254604080518281526020808402820101909152909b508b80156125cd578160200160208202803883390190505b5099508a6040519080825280602002602001820160405280156125fa578160200160208202803883390190505b509850600097505b8a88101561274057600280548990811061261857fe5b6000918252602091829020015460408051808201909152601681527f4147454e545f5441524745545f50524f544543544544000000000000000000009281019290925273ffffffffffffffffffffffffffffffffffffffff90811698508f168814156126e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50868a898151811015156126f057fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029091019091015261271d8761323a565b898981518110151561272b57fe5b60209081029091010152600190970196612602565b8d73ffffffffffffffffffffffffffffffffffffffff168d8d604051808383808284378201915050925050506000604051808303816000865af191505095503d935060405194503d85016040523d6000863e8515612ac45760025460408051808201909152601f81527f4147454e545f50524f5445435445445f544f4b454e535f4d4f444946494544006020820152908c14612838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600092505b8a831015612a4257898381518110151561285457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1660028481548110151561288357fe5b6000918252602091829020015460408051808201909152601f81527f4147454e545f50524f5445435445445f544f4b454e535f4d4f4449464945440092810192909252909173ffffffffffffffffffffffffffffffffffffffff90911614612947576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50888381518110151561295657fe5b9060200190602002015161299960028581548110151561297257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1661323a565b60408051808201909152601f81527f4147454e545f50524f5445435445445f42414c414e43455f4c4f5745524544006020820152911115612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060019092019161283e565b8d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f47f4287d5285559a03d8affeadc53ef3fca238a63c256c08a22bfd30fd5d33ce8f8f6040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a38385f35b8385fd5b600a81565b7f0b29780bb523a130b3b01f231ef49ed2fa2781645591a0b0a44ca98f15a5994c81565b60006020819052908152604090205460ff1681565b60007fcebf517aa4440d1d125e0355aae64401211d0848a23c02cc5d29a14822580ba4600102612b8f8686612b6a87878080601f01602080910402602001604051908101604052809392919081815260200183838082843750613ac1945050505050565b7c01000000000000000000000000000000000000000000000000000000009004613afc565b612b9a338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b508673ffffffffffffffffffffffffffffffffffffffff168686866040518083838082843782019150509250505060006040518083038185875af19250505092508215612d05578673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc25cfed0b22da6a56f0e5ff784979a0b8623eddf2aee4acd33c2adefb09cbab6888888604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a35b6040513d6000823e838015612d18573d82f35b3d82fd5b604080517f5452414e534645525f524f4c45000000000000000000000000000000000000008152905190819003600d019020612d59848484613b27565b612d64338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601981527f5641554c545f5452414e534645525f56414c55455f5a45524f00000000000000602082015260008411612ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff85161515612f955760405173ffffffffffffffffffffffffffffffffffffffff85169084156108fc029085906000818181858888f193505050506040805190810160405280601381526020017f5641554c545f53454e445f524556455254454400000000000000000000000000815250901515612f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061305b565b612fbc73ffffffffffffffffffffffffffffffffffffffff8616858563ffffffff613a1f16565b60408051808201909152601d81527f5641554c545f544f4b454e5f5452414e534645525f52455645525445440000006020820152901515613059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f239e7f6cdac8fb35a788a46b431b54da87de90b82448a2c294be5e92a6e579af856040518082815260200191505060405180910390a35050505050565b60006111d9837fb421f7ad7646747f3051c50c0b8e2377839296cd4973e27f63821d73e390338f6130ff6130fa86613b60565b613c48565b611fee565b60006115857f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b613504565b60608061313c33846130c7565b60408051808201909152601581527f4147454e545f43414e5f4e4f545f464f5257415244000000000000000000000060208201529015156131d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50506040805160208082018352600080835283519081529081019092529150613203838383613c89565b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613234611c7d565b14905090565b600073ffffffffffffffffffffffffffffffffffffffff8216151561326157503031610fb8565b61328773ffffffffffffffffffffffffffffffffffffffff83163063ffffffff6138e616565b9050610fb8565b600190565b4390565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905260009061332e868261435f565b9695505050505050565b600081613346576000610fb5565b507f20c13b0b00000000000000000000000000000000000000000000000000000000919050565b600080600083516000141561338557600092506134fb565b83600081518110151561339457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049150600460ff8316106133d757600092506134fb565b8160ff1660048111156133e657fe5b905060018160048111156133f657fe5b141561340e576134078686866143ad565b92506134fb565b600281600481111561341c57fe5b14156134cf57604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083018a905283518084039091018152605c90920192839052815161340793918291908401908083835b6020831061349b5780518252601f19909201916020918201910161347c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902086866143ad565b60038160048111156134dd57fe5b14156134f65761340785876134f187614475565b614581565b600092505b50509392505050565b5490565b6060610fb582613c48565b6060610fb58273ffffffffffffffffffffffffffffffffffffffff16613c48565b6000805b6002548110156135a1578273ffffffffffffffffffffffffffffffffffffffff1660028281548110151561356857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561359957600191506135a6565b600101613538565b600091505b50919050565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106135dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166002613609836146e2565b8154811061361357fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556002805490613692907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301614a87565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f3da25279c93c5b22b359bebff8b5ddbfd9b0506be8344b93c9a7dc999459fe0490600090a250565b60006136e2826138b3565b15156136f057506000610fb8565b6136f98261323a565b50600192915050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405190917ff70a5123a7f334e5dac1d9aa3a6aafbc316712bf2519ffe0d3aa4f7cba52767e91a250565b6137a7611c7d565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613843576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611c4661384f613293565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff6147e216565b6138ac7f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea8263ffffffff6147e216565b50565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff831615156138dc57600091506135a6565b50506000903b1190565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a0823100000000000000000000000000000000000000000000000000000000179052600090818061397386846147e6565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090613aae858261435f565b95945050505050565b8051602002815290565b6000600482511015613ad257610fb8565b506020015190565b60606111d98373ffffffffffffffffffffffffffffffffffffffff1683614817565b6060613b1f8473ffffffffffffffffffffffffffffffffffffffff168484614872565b949350505050565b6060613b1f8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1684614872565b6000816040516020018082805190602001908083835b60208310613b955780518252601f199092019160209182019101613b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613bf85780518252601f199092019160209182019101613bd9565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181101515613c7a57fe5b60209081029091010152919050565b6060600080606080613c99610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600080613d42613104565b9150613d4c611b64565b9050613d578a611290565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff87161515613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b83811015613e83578181015183820152602001613e6b565b50505050905090810190601f168015613eb05780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015613ee3578181015183820152602001613ecb565b50505050905090810190601f168015613f105780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b83811015613f45578181015183820152602001613f2d565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561404a57603f3d118015613fe85760203d03806020883e8601604052614044565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50614053565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156140d55781810151838201526020016140bd565b50505050905090810190601f1680156141025780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561413557818101518382015260200161411d565b50505050905090810190601f1680156141625780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561419557818101518382015260200161417d565b50505050905090810190601f1680156141c25780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff166141f5613104565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156142ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50806142b5611b64565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f4449464945440060208201529114614351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505050505050509392505050565b6000806040516020818551602087016000895af160008111156143a3573d80156143905760208114614399576143a1565b600193506143a1565b600183511493505b505b5090949350505050565b60008060008060006143be866148eb565b935093509350935083156143d5576000945061446a565b60408051600080825260208083018085528c905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af115801561442f573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161494505b505050509392505050565b805160408051808201909152601e81527f53494756414c5f494e56414c49445f4c454e4754485f504f505f425954450000602082015260609190600090819081841161451d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600183036040519080825280601f01601f19166020018201604052801561454f578160200160208202803883390190505b50935083516000141561456157614579565b602185019150602084019050614579818386516149cb565b505050919050565b60408051602481018481526044820192835283516064830152835160009360609385937f1626ba7e000000000000000000000000000000000000000000000000000000009389938993909160849091019060208501908083838b5b838110156145f45781810151838201526020016145dc565b50505050905090810190601f1680156146215780820380516001836020036101000a031916815260200191505b509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915061469486836203d090614a2d565b7fffffffff00000000000000000000000000000000000000000000000000000000167f20c13b0b00000000000000000000000000000000000000000000000000000000149695505050505050565b6000805b60025481101561474e578273ffffffffffffffffffffffffffffffffffffffff1660028281548110151561471657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415614746578091506135a6565b6001016146e6565b604080518082018252601981527f4147454e545f544f4b454e5f4e4f545f50524f54454354454400000000000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102c95781810151838201526020016102b1565b9055565b6000806000806040516020818751602089018a5afa9250600083111561480b57805191505b50909590945092505050565b60408051600280825260608083018452926020830190803883390190505090508281600081518110151561484757fe5b60209081029091010152805182908290600190811061486257fe5b6020908102909101015292915050565b60408051600380825260808201909252606091602082018380388339019050509050838160008151811015156148a457fe5b6020908102909101015280518390829060019081106148bf57fe5b6020908102909101015280518290829060029081106148da57fe5b602090810290910101529392505050565b6000806000808451604214151561490557600193506149c4565b84604181518110151561491457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900490506021850151925060418501519150601b8160ff1610156149a257601b015b8060ff16601b141580156149ba57508060ff16601c14155b156149c457600193505b9193509193565b60005b602082106149f0578251845260209384019390920191601f19909101906149ce565b50905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b60008060008060005a9350858411614a455783614a47565b855b9250600080885160208a018b87fa9150811515614a635761446a565b503d60208114614a725761446a565b604051816000823e5198975050505050505050565b81548183558181111561186a5760008381526020902061186a91810190830161128d91905b80821115610b8f5760008155600101614aac5600a165627a7a72305820a8e9477cf1f9768920234ae32baeec30e7e3238ee060eddc241f5b085dc0a1670029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e",
  "deployedBytecode": "0x6080604052600436106102235763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416627bb00381146103af57806301ffc9a7146103d65780630803fac01461042457806311a5e40914610439578063150b7a02146104835780631626ba7e146104c95780631ce3018114610527578063206b60f91461053c57806320c13b0b1461055157806326f06d24146105e85780632914b9bd146105fd57806332f0a3b51461067f578063368c3c34146106945780633e4eb756146106a957806342b2d066146106be57806347e7ef24146106d357806348a0c8dd146106f75780634c7ec0b01461070c57806354842f1414610724578063578eb50b146107395780635fa5e4e6146107675780636298e9021461077c5780637e7db6e1146107aa57806380afdea8146107d85780638129fc1c146107ed578063851a3790146108025780638b3dd7491461081a5780639890cdca1461082f5780639d4941d814610844578063a1658fad14610872578063a479e508146108e6578063a83e52b4146108fb578063aae2505114610929578063ab23c3451461093e578063b03bdb0414610978578063b06c42441461098d578063b4fa653c146109a2578063b61d27f6146109ba578063beabacc8146109f8578063c0774df314610a2f578063d4aae0c414610aa3578063d948d46814610ab8578063de4796ed14610b11578063e3d670d714610b26578063fd64eccb14610b54575b61022b610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515610304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156102c95781810151838201526020016102b1565b50505050905090810190601f1680156102f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051808201909152601381527f5641554c545f444154415f4e4f4e5f5a45524f00000000000000000000000000602082015236156103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506103ad600034610b93565b005b3480156103bb57600080fd5b506103c4610eb2565b60408051918252519081900360200190f35b3480156103e257600080fd5b506104107fffffffff0000000000000000000000000000000000000000000000000000000060043516610ed6565b604080519115158252519081900360200190f35b34801561043057600080fd5b50610410610b69565b34801561044557600080fd5b5061044e610fbd565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561048f57600080fd5b5061044e73ffffffffffffffffffffffffffffffffffffffff60048035821691602480359091169160443591606435908101910135610fe1565b3480156104d557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261044e9583359536956044949193909101919081908401838280828437509497506110ab9650505050505050565b34801561053357600080fd5b5061044e611137565b34801561054857600080fd5b506103c461113c565b34801561055d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044e94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506111719650505050505050565b3480156105f457600080fd5b506103c46111e0565b34801561060957600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526106569436949293602493928401919081908401838280828437509497506112909650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561068b57600080fd5b5061065661139c565b3480156106a057600080fd5b506103c461143a565b3480156106b557600080fd5b506103c461145e565b3480156106ca57600080fd5b506103c4611482565b6103ad73ffffffffffffffffffffffffffffffffffffffff600435166024356114a6565b34801561070357600080fd5b5061041061155a565b34801561071857600080fd5b506103ad60043561158a565b34801561073057600080fd5b506103c46116c3565b34801561074557600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff600435166116e7565b34801561077357600080fd5b506103c461186f565b34801561078857600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516611893565b3480156107b657600080fd5b5061041073ffffffffffffffffffffffffffffffffffffffff60043516611b5e565b3480156107e457600080fd5b506103c4611b64565b3480156107f957600080fd5b506103ad611b8f565b34801561080e57600080fd5b50610656600435611c48565b34801561082657600080fd5b506103c4611c7d565b34801561083b57600080fd5b5061044e611ca8565b34801561085057600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516611ccc565b34801561087e57600080fd5b50604080516020600460443581810135838102808601850190965280855261041095833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750611fee9650505050505050565b3480156108f257600080fd5b5061065661217e565b34801561090757600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043516612240565b34801561093557600080fd5b50610656612445565b34801561094a57600080fd5b506103ad6004803573ffffffffffffffffffffffffffffffffffffffff169060248035908101910135612461565b34801561098457600080fd5b506103c4612ac8565b34801561099957600080fd5b506103c4612acd565b3480156109ae57600080fd5b50610410600435612af1565b3480156109c657600080fd5b506103ad6004803573ffffffffffffffffffffffffffffffffffffffff16906024803591604435918201910135612b06565b348015610a0457600080fd5b506103ad73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435612d1c565b348015610a3b57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261041095833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506130c79650505050505050565b348015610aaf57600080fd5b50610656613104565b348015610ac457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103ad94369492936024939284019190819084018382808284375094975061312f9650505050505050565b348015610b1d57600080fd5b50610410613209565b348015610b3257600080fd5b506103c473ffffffffffffffffffffffffffffffffffffffff6004351661323a565b348015610b6057600080fd5b5061041061328e565b600080610b74611c7d565b90508015801590610b8c575080610b89613293565b10155b91505b5090565b610b9b61155a565b60408051808201909152601581527f5641554c545f4e4f545f4445504f53495441424c4500000000000000000000006020820152901515610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601881527f5641554c545f4445504f5349545f56414c55455f5a45524f0000000000000000602082015260008211610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff82161515610d985760408051808201909152601481527f5641554c545f56414c55455f4d49534d415443480000000000000000000000006020820152348214610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50610e61565b610dc073ffffffffffffffffffffffffffffffffffffffff831633308463ffffffff61329716565b6040805190810160405280602081526020017f5641554c545f544f4b454e5f5452414e534645525f46524f4d5f524556455254815250901515610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b604080518281529051339173ffffffffffffffffffffffffffffffffffffffff8516917f2790b90165fd3973ad7edde4eca71b4f8808dd4857a2a3a3e8ae5642a5cb196e9181900360200190a35050565b7f6eb2a499556bfa2872f5aa15812b956cc4a71b4d64eb3553f7073c7e41415aaa81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167ffb855dc9000000000000000000000000000000000000000000000000000000001480610f6957507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80610fb557507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b90505b919050565b7ffb855dc90000000000000000000000000000000000000000000000000000000081565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe0d2ab3bf6896c073bb33b920a9b60f3c8207b3cc3b7561c3101cb081a8f0883878787604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a4507f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b600082815260208190526040812054819060ff16156110d5576110ce6001613338565b9150611130565b60015473ffffffffffffffffffffffffffffffffffffffff1615156110fc57506000611124565b60015461112190859073ffffffffffffffffffffffffffffffffffffffff168561336d565b90505b61112d81613338565b91505b5092915050565b600081565b604080517f5452414e534645525f524f4c45000000000000000000000000000000000000008152905190819003600d01902081565b60006111d9836040518082805190602001908083835b602083106111a65780518252601f199092019160209182019101611187565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836110ab565b9392505050565b60006111ea610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515611287576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50506002545b90565b600061129a61217e565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561131e578181015183820152602001611306565b50505050905090810190601f16801561134b5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b505050506040513d602081101561139457600080fd5b505192915050565b60006113a6613104565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b5051905090565b7fb421f7ad7646747f3051c50c0b8e2377839296cd4973e27f63821d73e390338f81565b7f0a1ad7b87f5846153c6d5a1f761d71c7d0cfd122384f56066cd33239b793369481565b7f71eee93d500f6f065e38b27d242a756466a00a52a1dbcd6b4260f01a8640402a81565b6114ae610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000602082015290151561154b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506115568282610b93565b5050565b60006115857f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea613504565b905090565b7f0b29780bb523a130b3b01f231ef49ed2fa2781645591a0b0a44ca98f15a5994c6115b482613508565b6115bf338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060008381526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551849133917fb150212e573caa2a0216cf8f273ef996af143fd7b2d35abd92c8105536cac1609190a3505050565b7f23ce341656c3f14df6692eebd4757791e33662b7dcf9970c8308303da5472b7c81565b7f71eee93d500f6f065e38b27d242a756466a00a52a1dbcd6b4260f01a8640402a61171182613513565b61171c338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156117b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506117c383613534565b60408051808201909152601981527f4147454e545f544f4b454e5f4e4f545f50524f544543544544000000000000006020820152901515611860576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061186a836135ac565b505050565b7fcebf517aa4440d1d125e0355aae64401211d0848a23c02cc5d29a14822580ba481565b7f6eb2a499556bfa2872f5aa15812b956cc4a71b4d64eb3553f7073c7e41415aaa6118bd82613513565b6118c8338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611965576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060025460408051808201909152601881527f4147454e545f544f4b454e535f4341505f524541434845440000000000000000602082015290600a11611a07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611a11836136d7565b60408051808201909152601581527f4147454e545f544f4b454e5f4e4f545f455243323000000000000000000000006020820152901515611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611ab883613534565b60408051808201909152601d81527f4147454e545f544f4b454e5f414c52454144595f50524f54454354454400000060208201529015611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061186a83613702565b50600090565b60006115857fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b613504565b611b97611c7d565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611c3c61379f565b611c46600161387c565b565b6002805482908110611c5657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60006115857febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e613504565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b6000806000611cda84611b5e565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611d8061139c565b9250611d8b836138b3565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff84161515611e93576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611e8d573d6000803e3d6000fd5b50611f83565b5082611ebb73ffffffffffffffffffffffffffffffffffffffff82163063ffffffff6138e616565b9150611ee473ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff613a1f16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611ff9610b69565b15156120085760009150612176565b612010613104565b905073ffffffffffffffffffffffffffffffffffffffff811615156120385760009150612176565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef910686308761206088613ab7565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156120f85781810151838201526020016120e0565b50505050905090810190601f1680156121255780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b505050506040513d602081101561217157600080fd5b505191505b509392505050565b600080612189613104565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561136a57600080fd5b60007f23ce341656c3f14df6692eebd4757791e33662b7dcf9970c8308303da5472b7c61226c83613513565b612277338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612314576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601881527f4147454e545f44455349474e415445445f544f5f53454c460000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff85163014156123c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506001805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169450849033907f3ecf54ed9acd859c5ee7f080794267b8f08b65d2446d816cef1efccd6d00d73590600090a450505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000806000807f0a1ad7b87f5846153c6d5a1f761d71c7d0cfd122384f56066cd33239b79336946001026124f58d6124d08e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843750613ac1945050505050565b7c01000000000000000000000000000000000000000000000000000000009004613ada565b612500338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561259d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600254604080518281526020808402820101909152909b508b80156125cd578160200160208202803883390190505b5099508a6040519080825280602002602001820160405280156125fa578160200160208202803883390190505b509850600097505b8a88101561274057600280548990811061261857fe5b6000918252602091829020015460408051808201909152601681527f4147454e545f5441524745545f50524f544543544544000000000000000000009281019290925273ffffffffffffffffffffffffffffffffffffffff90811698508f168814156126e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50868a898151811015156126f057fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029091019091015261271d8761323a565b898981518110151561272b57fe5b60209081029091010152600190970196612602565b8d73ffffffffffffffffffffffffffffffffffffffff168d8d604051808383808284378201915050925050506000604051808303816000865af191505095503d935060405194503d85016040523d6000863e8515612ac45760025460408051808201909152601f81527f4147454e545f50524f5445435445445f544f4b454e535f4d4f444946494544006020820152908c14612838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600092505b8a831015612a4257898381518110151561285457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1660028481548110151561288357fe5b6000918252602091829020015460408051808201909152601f81527f4147454e545f50524f5445435445445f544f4b454e535f4d4f4449464945440092810192909252909173ffffffffffffffffffffffffffffffffffffffff90911614612947576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50888381518110151561295657fe5b9060200190602002015161299960028581548110151561297257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1661323a565b60408051808201909152601f81527f4147454e545f50524f5445435445445f42414c414e43455f4c4f5745524544006020820152911115612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060019092019161283e565b8d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f47f4287d5285559a03d8affeadc53ef3fca238a63c256c08a22bfd30fd5d33ce8f8f6040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a38385f35b8385fd5b600a81565b7f0b29780bb523a130b3b01f231ef49ed2fa2781645591a0b0a44ca98f15a5994c81565b60006020819052908152604090205460ff1681565b60007fcebf517aa4440d1d125e0355aae64401211d0848a23c02cc5d29a14822580ba4600102612b8f8686612b6a87878080601f01602080910402602001604051908101604052809392919081815260200183838082843750613ac1945050505050565b7c01000000000000000000000000000000000000000000000000000000009004613afc565b612b9a338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b508673ffffffffffffffffffffffffffffffffffffffff168686866040518083838082843782019150509250505060006040518083038185875af19250505092508215612d05578673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc25cfed0b22da6a56f0e5ff784979a0b8623eddf2aee4acd33c2adefb09cbab6888888604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a35b6040513d6000823e838015612d18573d82f35b3d82fd5b604080517f5452414e534645525f524f4c45000000000000000000000000000000000000008152905190819003600d019020612d59848484613b27565b612d64338383611fee565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5060408051808201909152601981527f5641554c545f5452414e534645525f56414c55455f5a45524f00000000000000602082015260008411612ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5073ffffffffffffffffffffffffffffffffffffffff85161515612f955760405173ffffffffffffffffffffffffffffffffffffffff85169084156108fc029085906000818181858888f193505050506040805190810160405280601381526020017f5641554c545f53454e445f524556455254454400000000000000000000000000815250901515612f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5061305b565b612fbc73ffffffffffffffffffffffffffffffffffffffff8616858563ffffffff613a1f16565b60408051808201909152601d81527f5641554c545f544f4b454e5f5452414e534645525f52455645525445440000006020820152901515613059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f239e7f6cdac8fb35a788a46b431b54da87de90b82448a2c294be5e92a6e579af856040518082815260200191505060405180910390a35050505050565b60006111d9837fb421f7ad7646747f3051c50c0b8e2377839296cd4973e27f63821d73e390338f6130ff6130fa86613b60565b613c48565b611fee565b60006115857f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b613504565b60608061313c33846130c7565b60408051808201909152601581527f4147454e545f43414e5f4e4f545f464f5257415244000000000000000000000060208201529015156131d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50506040805160208082018352600080835283519081529081019092529150613203838383613c89565b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613234611c7d565b14905090565b600073ffffffffffffffffffffffffffffffffffffffff8216151561326157503031610fb8565b61328773ffffffffffffffffffffffffffffffffffffffff83163063ffffffff6138e616565b9050610fb8565b600190565b4390565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905260009061332e868261435f565b9695505050505050565b600081613346576000610fb5565b507f20c13b0b00000000000000000000000000000000000000000000000000000000919050565b600080600083516000141561338557600092506134fb565b83600081518110151561339457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049150600460ff8316106133d757600092506134fb565b8160ff1660048111156133e657fe5b905060018160048111156133f657fe5b141561340e576134078686866143ad565b92506134fb565b600281600481111561341c57fe5b14156134cf57604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083018a905283518084039091018152605c90920192839052815161340793918291908401908083835b6020831061349b5780518252601f19909201916020918201910161347c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902086866143ad565b60038160048111156134dd57fe5b14156134f65761340785876134f187614475565b614581565b600092505b50509392505050565b5490565b6060610fb582613c48565b6060610fb58273ffffffffffffffffffffffffffffffffffffffff16613c48565b6000805b6002548110156135a1578273ffffffffffffffffffffffffffffffffffffffff1660028281548110151561356857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561359957600191506135a6565b600101613538565b600091505b50919050565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106135dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166002613609836146e2565b8154811061361357fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556002805490613692907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301614a87565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f3da25279c93c5b22b359bebff8b5ddbfd9b0506be8344b93c9a7dc999459fe0490600090a250565b60006136e2826138b3565b15156136f057506000610fb8565b6136f98261323a565b50600192915050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560405190917ff70a5123a7f334e5dac1d9aa3a6aafbc316712bf2519ffe0d3aa4f7cba52767e91a250565b6137a7611c7d565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613843576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50611c4661384f613293565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff6147e216565b6138ac7f665fd576fbbe6f247aff98f5c94a561e3f71ec2d3c988d56f12d342396c50cea8263ffffffff6147e216565b50565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff831615156138dc57600091506135a6565b50506000903b1190565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a0823100000000000000000000000000000000000000000000000000000000179052600090818061397386846147e6565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090613aae858261435f565b95945050505050565b8051602002815290565b6000600482511015613ad257610fb8565b506020015190565b60606111d98373ffffffffffffffffffffffffffffffffffffffff1683614817565b6060613b1f8473ffffffffffffffffffffffffffffffffffffffff168484614872565b949350505050565b6060613b1f8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1684614872565b6000816040516020018082805190602001908083835b60208310613b955780518252601f199092019160209182019101613b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310613bf85780518252601f199092019160209182019101613bd9565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181101515613c7a57fe5b60209081029091010152919050565b6060600080606080613c99610b69565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600080613d42613104565b9150613d4c611b64565b9050613d578a611290565b60408051808201909152601b81527f45564d52554e5f4558454355544f525f554e415641494c41424c450000000000602082015290965073ffffffffffffffffffffffffffffffffffffffff87161515613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b506040516060602482019081528b5160848301528b517f279cea3500000000000000000000000000000000000000000000000000000000975087928d928d928d9282916044820191606481019160a490910190602089019080838360005b83811015613e83578181015183820152602001613e6b565b50505050905090810190601f168015613eb05780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015613ee3578181015183820152602001613ecb565b50505050905090810190601f168015613f105780820380516001836020036101000a031916815260200191505b508481038252855181528551602091820191808801910280838360005b83811015613f45578181015183820152602001613f2d565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509350600080855160208701895af4604051935080801561404a57603f3d118015613fe85760203d03806020883e8601604052614044565b7f08c379a000000000000000000000000000000000000000000000000000000000865260206004870152601e60248701527f45564d52554e5f4558454355544f525f494e56414c49445f52455455524e00006044870152606486fd5b50614053565b3d6000863e3d85fd5b50508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156140d55781810151838201526020016140bd565b50505050905090810190601f1680156141025780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561413557818101518382015260200161411d565b50505050905090810190601f1680156141625780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561419557818101518382015260200161417d565b50505050905090810190601f1680156141c25780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff166141f5613104565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f444946494544008152509015156142ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50806142b5611b64565b60408051808201909152601f81527f45564d52554e5f50524f5445435445445f53544154455f4d4f4449464945440060208201529114614351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b505050505050509392505050565b6000806040516020818551602087016000895af160008111156143a3573d80156143905760208114614399576143a1565b600193506143a1565b600183511493505b505b5090949350505050565b60008060008060006143be866148eb565b935093509350935083156143d5576000945061446a565b60408051600080825260208083018085528c905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af115801561442f573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161494505b505050509392505050565b805160408051808201909152601e81527f53494756414c5f494e56414c49445f4c454e4754485f504f505f425954450000602082015260609190600090819081841161451d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382528381815181526020019150805190602001908083836000838110156102c95781810151838201526020016102b1565b50600183036040519080825280601f01601f19166020018201604052801561454f578160200160208202803883390190505b50935083516000141561456157614579565b602185019150602084019050614579818386516149cb565b505050919050565b60408051602481018481526044820192835283516064830152835160009360609385937f1626ba7e000000000000000000000000000000000000000000000000000000009389938993909160849091019060208501908083838b5b838110156145f45781810151838201526020016145dc565b50505050905090810190601f1680156146215780820380516001836020036101000a031916815260200191505b509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050915061469486836203d090614a2d565b7fffffffff00000000000000000000000000000000000000000000000000000000167f20c13b0b00000000000000000000000000000000000000000000000000000000149695505050505050565b6000805b60025481101561474e578273ffffffffffffffffffffffffffffffffffffffff1660028281548110151561471657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415614746578091506135a6565b6001016146e6565b604080518082018252601981527f4147454e545f544f4b454e5f4e4f545f50524f54454354454400000000000000602080830191825292517f08c379a0000000000000000000000000000000000000000000000000000000008152600481019384528251602482015282519293928392604490920191908083836000838110156102c95781810151838201526020016102b1565b9055565b6000806000806040516020818751602089018a5afa9250600083111561480b57805191505b50909590945092505050565b60408051600280825260608083018452926020830190803883390190505090508281600081518110151561484757fe5b60209081029091010152805182908290600190811061486257fe5b6020908102909101015292915050565b60408051600380825260808201909252606091602082018380388339019050509050838160008151811015156148a457fe5b6020908102909101015280518390829060019081106148bf57fe5b6020908102909101015280518290829060029081106148da57fe5b602090810290910101529392505050565b6000806000808451604214151561490557600193506149c4565b84604181518110151561491457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900490506021850151925060418501519150601b8160ff1610156149a257601b015b8060ff16601b141580156149ba57508060ff16601c14155b156149c457600193505b9193509193565b60005b602082106149f0578251845260209384019390920191601f19909101906149ce565b50905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b60008060008060005a9350858411614a455783614a47565b855b9250600080885160208a018b87fa9150811515614a635761446a565b503d60208114614a725761446a565b604051816000823e5198975050505050505050565b81548183558181111561186a5760008381526020902061186a91810190830161128d91905b80821115610b8f5760008155600101614aac5600a165627a7a72305820a8e9477cf1f9768920234ae32baeec30e7e3238ee060eddc241f5b085dc0a1670029",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
