{
  "_format": "hh-sol-artifact-1",
  "contractName": "GuessHandlerV2",
  "sourceName": "contracts/V3/handler/GuessHandlerV2.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "claimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "getClaimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "areaNameList",
          "type": "string[]"
        }
      ],
      "name": "getEngineAreaList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIOBranches",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8[]",
              "name": "inBranch",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[]",
              "name": "outBranch",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IHandler.IOBranch[]",
          "name": "branches",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getInputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getOutputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guessHandlerV2Helper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regRule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50614d7c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101175760003560e01c8063715018a6116100a8578063715018a6146102175780638129fc1c1461021f5780638da5cb5b1461022757806395edcb081461022f578063a903620c1461024f578063af84b51f14610262578063b41bd78914610282578063b4b7035214610295578063d0d35b55146102a8578063f2fde38b146102bb578063f2fe4fa5146102ce57600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b157806361091ef3146101c657806362329cc5146101f15780636dabaf0414610204575b600080fd5b61013061012a366004612f60565b50600090565b60405190151581526020015b60405180910390f35b6101586101533660046130a5565b6102dd565b60405161013c919061315e565b6040805160208101909152600081525b60405161013c91906131fe565b610195610190366004613211565b610377565b60405161013c919061328b565b6040516000815260200161013c565b6101c46101bf3660046132d8565b6103a8565b005b6067546101d9906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101956101ff36600461336b565b610429565b61013061021236600461340e565b610506565b6101c46105a1565b6101c46105dc565b6101d9610651565b61024261023d3660046136a5565b610660565b60405161013c9190613875565b6101c461025d366004613fc9565b610b7d565b61027561027036600461417c565b610bfa565b60405161013c9190614299565b6101c46102903660046142fb565b610d57565b6101306102a3366004612f60565b610df9565b6101756102b636600461432f565b610e6c565b6101c46102c9366004614376565b610e83565b606060405161013c91906143d1565b60408051602081019091526060815260006102fe8a898989898e6000610f20565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035d57602002820191906000526020600020905b815481526020019060010190808311610349575b5050509190925250919d9c50505050505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103e09190614456565b90815260405190819003602001902054336001600160a01b03909116146104225760405162461bcd60e51b815260040161041990614472565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561044657610446612dc3565b60405190808252806020026020018201604052801561046f578160200160208202803683370190505b50905060005b81518110156104ff576065848281518110610492576104926144a9565b60200260200101516040516104a79190614456565b9081526040519081900360200190205482516001600160a01b03909116908390839081106104d7576104d76144a9565b6001600160a01b03909216602092830291909101909101526104f8816144d5565b9050610475565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516105479190614456565b90815260405190819003602001902054336001600160a01b03909116146105805760405162461bcd60e51b815260040161041990614472565b60ff84166105945761059487878786610f8f565b5060019695505050505050565b336105aa610651565b6001600160a01b0316146105d05760405162461bcd60e51b8152600401610419906144ee565b6105da600061138f565b565b60006105e860016113e1565b90508015610600576000805461ff0019166101001790555b61060861146e565b801561064e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506065816040516106b29190614456565b90815260405190819003602001902054336001600160a01b03909116146106eb5760405162461bcd60e51b815260040161041990614472565b30835260608401516000906106ff9061149d565b905060008560600151610100015161071a87606001516114af565b61072788606001516114ce565b60405160200161073993929190614523565b60405160208183030381529060405280519060200120905060006107756107708460008a606001516114f39092919063ffffffff16565b61154d565b905060006107cc338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff166000146107b9578c6060015160e001516107c3565b8c6060015160c001515b8d516000610f20565b90506107d8888361159b565b60001960ff8316016108365760006127106107f68a606001516115fa565b6108009190614545565b905060006108216107708760018d606001516114f39092919063ffffffff16565b905061082f8583838d611635565b5050610b45565b60011960ff831601610a0557600080606760009054906101000a90046001600160a01b03166001600160a01b0316636a503493866040518060e001604052808e60600151602001516001600160a01b031681526020018e60600151610100015163ffffffff1681526020016108ae8f606001516114af565b61ffff1681526020016108c48f606001516114ce565b61ffff1681526020018e602001516001600160a01b031681526020018e6060015160e0015163ffffffff1681526020018e600001516001600160a01b03168152508d6060015160e001516040518463ffffffff1660e01b815260040161092c939291906145df565b60408051808303816000875af115801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096e9190614619565b915091506109aa604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b8152508361174e565b6109e2604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b81525082611797565b81156109fa576109f48a8486846117dc565b5061082f565b61082f8a84866118f5565b60021960ff831601610aa9576067546060890151610140015180516001600160a01b039092169163bac49a70918691600090610a4357610a436144a9565b6020026020010151606001518b600001516040518463ffffffff1660e01b8152600401610a7293929190614645565b600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b50505050610b45565b60031960ff831601610b45576060880151600090610acd90610770908760016114f3565b6067548a51604051630e842aef60e01b81529293506001600160a01b0390911691630e842aef91610b049188918691600401614645565b600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b50505050610b42898385846117dc565b50505b60ff821660011480610b5a575060ff82166003145b15610b6a57610b6a8882846118f5565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606581604051610bbc9190614456565b90815260405190819003602001902054336001600160a01b0390911614610bf55760405162461bcd60e51b815260040161041990614472565b505050565b60606000826040015183606001518460800151604051602001610c1f93929190614523565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526067546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a92610d09929188918890600401614664565b600060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4e919081019061475b565b95945050505050565b33610d60610651565b6001600160a01b031614610d865760405162461bcd60e51b8152600401610419906144ee565b610d8f81611954565b604080518082018252601481527323aaa2a9a9afa420a7222622a92fa422a62822a960611b60208201529051606591610dc791614456565b90815260405190819003602001902054606780546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b815250606581604051610e2a9190614456565b90815260405190819003602001902054336001600160a01b0390911614610e635760405162461bcd60e51b815260040161041990614472565b50600092915050565b6040805160208101909152600081525b9392505050565b33610e8c610651565b6001600160a01b031614610eb25760405162461bcd60e51b8152600401610419906144ee565b6001600160a01b038116610f175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610419565b61064e8161138f565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b6000610f9a82611a76565b90506000858585604051602001610fb393929190614523565b60408051601f19818403018152828252805160209182012060c0840183526000808552918401829052918301819052606083018190526080830181905260a08301529150611002846000611a8b565b6001600160a01b03168152611018846001611ad6565b61ffff16602082015261102c846002611ad6565b816040019061ffff16908161ffff1681525050600080336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061479a565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611107919061479a565b60405163161a012f60e11b815263ffffffff8b16600482015261ffff8a166024820152600160448201526001600160a01b039190911690632c34025e90606401600060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118c91908101906149eb565b91509150816111dd5760405162461bcd60e51b815260206004820152601f60248201527f5f757064617465417267732067726f7570536c6f74206e6f7420666f756e64006044820152606401610419565b600061120a82600001516000815181106111f9576111f96144a9565b602002602001015160000151611b21565b90508060008151811061121f5761121f6144a9565b602002602001015184608001818152505061123b876003611ad6565b61ffff908116606086015260208501511661128c5760405162461bcd60e51b815260206004820152601160248201527036bab63a34b83632a6b4b71032b93937b960791b6044820152606401610419565b836020015161ffff16846040015161ffff16116112df5760405162461bcd60e51b815260206004820152601160248201527036bab63a34b83632a6b0bc1032b93937b960791b6044820152606401610419565b60675460408051630d8bf71b60e31b81526004810188905286516001600160a01b039081166024830152602088015161ffff9081166044840152928801518316606483015260608801519092166084820152608087015160a482015260a087015160c4820152911690636c5fb8d89060e401600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b5050505050505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611428578160ff1660011480156114045750303b155b6114205760405162461bcd60e51b815260040161041990614ad4565b506000919050565b60005460ff80841691161061144f5760405162461bcd60e51b815260040161041990614ad4565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166114955760405162461bcd60e51b815260040161041990614b22565b6105da611d3d565b60606114a98230611d6d565b92915050565b60006114a98260a001516010600060086114c99190614b6d565b611e12565b60006114a98260a001516010600060086114e89190614b6d565b6114c9906010614b6d565b6114fb612cc0565b61152a8361150a846001614b80565b60ff168151811061151d5761151d6144a9565b6020026020010151611e31565b60028151811061153c5761153c6144a9565b602002602001015190509392505050565b80516000901580159061156257508151602110155b61156b57600080fd5b60008061157784611f3a565b8151919350915060208210156115935760208290036101000a90045b949350505050565b60006115aa8360600151611f81565b90508160ff168160ff1614610bf55760405162461bcd60e51b81526020600482015260166024820152752fb1b432b1b5a1a6a210313930b731b41032b93937b960511b6044820152606401610419565b60006114a98260a001516020600060086116149190614b6d565b61161f906010614b6d565b61162a906010614b6d565b6114e8906008614b6d565b606760009054906101000a90046001600160a01b03166001600160a01b031663e312064c8585856040518060e001604052808760600151602001516001600160a01b031681526020018760600151610100015163ffffffff1681526020016116a088606001516114af565b61ffff1681526020016116b688606001516114ce565b61ffff16815260200187602001516001600160a01b03168152602001876060015160c0015163ffffffff16815260200187600001516001600160a01b03168152506040518563ffffffff1660e01b81526004016117169493929190614b99565b600060405180830381600087803b15801561173057600080fd5b505af1158015611744573d6000803e3d6000fd5b5050505050505050565b6117938282604051602401611764929190614bc3565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052611fa6565b5050565b61179382826040516024016117ad929190614be7565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052611fa6565b6000806117e7611faf565b90506117ff6040518060200160405280606081525090565b6001606083015260ff851660021461181857600461181b565b60025b60ff168252604080516001808252818301909252906020808301908036833750505061014083015260408051600180825281830190925290602080830190803683375050506101608301819052805185919060009061187c5761187c6144a9565b60209081029190910101526001610120830152606660408301526118a08183611ff6565b60008681526066602090815260409091208251805184936118c5928492910190612cda565b509050508161016001516000815181106118e1576118e16144a9565b602002602001015192505050949350505050565b60006118ff611faf565b90506119176040518060200160405280606081525090565b606560408301526001602083015261192f8183611ff6565b6000848152606660209081526040909120825180518493611744928492910190612cda565b3361195d610651565b6001600160a01b0316146119835760405162461bcd60e51b8152600401610419906144ee565b60005b8151811015611793578181815181106119a1576119a16144a9565b602002602001015160658383815181106119bd576119bd6144a9565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a2a9190810190614c09565b604051611a379190614456565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055611a6f816144d5565b9050611986565b60606000610e7c611a86846125ee565b611e31565b600080611a9a611a86856125ee565b9050611593611ab7828560ff168151811061151d5761151d6144a9565b600281518110611ac957611ac96144a9565b6020026020010151612614565b600080611ae5611a86856125ee565b9050611593611b02828560ff168151811061151d5761151d6144a9565b600281518110611b1457611b146144a9565b602002602001015161154d565b60408051600280825260608083018452926000929190602083019080368337505084519192505060ff161580611b5b5750825160ff166001145b15611be1578260400151600181518110611b7757611b776144a9565b602002602001015181600081518110611b9257611b926144a9565b6020026020010181815250508260400151600281518110611bb557611bb56144a9565b602002602001015181600181518110611bd057611bd06144a9565b6020026020010181815250506114a9565b825160ff1660021901611c43578260400151600281518110611c0557611c056144a9565b602002602001015181600081518110611c2057611c206144a9565b6020026020010181815250508260400151600381518110611bb557611bb56144a9565b825160ff16600119016114a9576000611c5b8461262e565b90508060ff166002036104ff576000611c73856126b3565b90506000611c8086612707565b604087015190915060ff8216611c97846002614c51565b611ca19190614c51565b61ffff1681518110611cb557611cb56144a9565b602002602001015184600081518110611cd057611cd06144a9565b6020908102919091010152604086015160ff8216611cef846003614c51565b611cf99190614c51565b61ffff1681518110611d0d57611d0d6144a9565b602002602001015184600181518110611d2857611d286144a9565b60200260200101818152505050505092915050565b600054610100900460ff16611d645760405162461bcd60e51b815260040161041990614b22565b6105da3361138f565b60606000611d82611a868561016001516125ee565b905060005b8151811015611e07576000611dbc611daa84848151811061151d5761151d6144a9565b600081518110611ac957611ac96144a9565b9050846001600160a01b0316816001600160a01b031603611df657611dec83838151811061151d5761151d6144a9565b93505050506114a9565b50611e00816144d5565b9050611d87565b506060949350505050565b91821c91600080611e26600180861b614c6c565b909416949350505050565b6060611e3c82612771565b611e4557600080fd5b6000611e50836127ac565b90506000816001600160401b03811115611e6c57611e6c612dc3565b604051908082528060200260200182016040528015611ea557816020015b611e92612cc0565b815260200190600190039081611e8a5790505b5090506000611eb78560200151612831565b8560200151611ec69190614b6d565b90506000805b84811015611f2f57611edd836128ac565b9150604051806040016040528083815260200184815250848281518110611f0657611f066144a9565b6020908102919091010152611f1b8284614b6d565b925080611f27816144d5565b915050611ecc565b509195945050505050565b6000806000611f4c8460200151612831565b90506000818560200151611f609190614b6d565b90506000828660000151611f749190614c6c565b9196919550909350505050565b60006114a98260a00151600860006008611f9b9190614b6d565b6114e8906010614b6d565b61064e81612950565b611fb7612d25565b611fbf612d25565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612011578061200d816144d5565b9150505b8160e001516127101461202c5780612028816144d5565b9150505b816101000151612710146120485780612044816144d5565b9150505b6101408201515115158061206157506101608201515115155b8061207157506101a08201515115155b156120e35760008261016001515183610140015151116120b657826101a001515183610160015151116120aa57826101a00151516120be565b826101600151516120be565b826101400151515b90506120cb816004614c7f565b6120d59083614b6d565b60ff90911661012084015290505b61210d6040518060600160405280602e8152602001614cb0602e913983610120015160ff16611797565b806001600160401b0381111561212557612125612dc3565b60405190808252806020026020018201604052801561214e578160200160208202803683370190505b508352815161215e908490612971565b61216c8383602001516129c9565b61217a838360600151612a0a565b612188838360400151612a59565b61219783836101200151612a9d565b6121b8604051806060016040528060258152602001614cde60259139612b2e565b60008060019050836080015162ffffff16612710146121ed576121df858560800151612b71565b6121ea600183614c51565b91505b8360a0015163ffffffff166127101461221c5761220e858560a00151612bd8565b612219600283614c51565b91505b60c0840151156122625760c0840151855182612237816144d5565b935081518110612249576122496144a9565b602090810291909101015261225f600483614c51565b91505b8360e00151612710146122ab5760e0840151855182612280816144d5565b935081518110612292576122926144a9565b60209081029190910101526122a8600883614c51565b91505b836101000151612710146122f6576101008401518551826122cb816144d5565b9350815181106122dd576122dd6144a9565b60209081029190910101526122f3601083614c51565b91505b61012084015160ff16156125e45760005b84610120015160ff168110156125b25760008561014001515111801561233257508461014001515181105b1561238957846101400151818151811061234e5761234e6144a9565b602002602001015186600001518380612366906144d5565b945081518110612378576123786144a9565b6020026020010181815250506123b7565b855160009083612398816144d5565b9450815181106123aa576123aa6144a9565b6020026020010181815250505b6000856101600151511180156123d257508461016001515181105b156124295784610160015181815181106123ee576123ee6144a9565b602002602001015186600001518380612406906144d5565b945081518110612418576124186144a9565b602002602001018181525050612457565b855160009083612438816144d5565b94508151811061244a5761244a6144a9565b6020026020010181815250505b60008561018001515111801561247257508461018001515181105b156124cc57846101800151818151811061248e5761248e6144a9565b602002602001015160ff16866000015183806124a9906144d5565b9450815181106124bb576124bb6144a9565b6020026020010181815250506124f9565b85518190836124da816144d5565b9450815181106124ec576124ec6144a9565b6020026020010181815250505b6000856101a00151511180156125145750846101a001515181105b1561257457846101a001518181518110612530576125306144a9565b60200260200101516001600160a01b031686600001518380612551906144d5565b945081518110612563576125636144a9565b6020026020010181815250506125a2565b855160009083612583816144d5565b945081518110612595576125956144a9565b6020026020010181815250505b6125ab816144d5565b9050612307565b506125be602083614c51565b91506125e4604051806080016040528060448152602001614d0360449139865151611797565b6104228583612c4b565b6125f6612cc0565b50604080518082019091528151815260209182019181019190915290565b805160009060151461262557600080fd5b6114a98261154d565b6000600260ff16826000015160ff16036126ab576114a9826040015160008151811061265c5761265c6144a9565b6020026020010151600260ff16600060046126779190614b80565b612682906004614b80565b61268d906010614b80565b612698906002614b80565b6126a3906004614b80565b60ff16611e12565b506002919050565b805160009060ff16600214806126cd5750815160ff166003145b15611420576114a982604001516000815181106126ec576126ec6144a9565b6020026020010151601060ff16600060046126989190614b80565b805160009060ff16600214806127215750815160ff166003145b15611420576114a98260400151600081518110612740576127406144a9565b6020026020010151600260ff166000600461275b9190614b80565b612766906004614b80565b6126a3906010614b80565b8051600090810361278457506000919050565b6020820151805160001a9060c08210156127a2575060009392505050565b5060019392505050565b805160009081036127bf57506000919050565b6000806127cf8460200151612831565b84602001516127de9190614b6d565b90506000846000015185602001516127f69190614b6d565b90505b808210156128285761280a826128ac565b6128149083614b6d565b915082612820816144d5565b9350506127f9565b50909392505050565b8051600090811a608081101561284a5750600092915050565b60b8811080612865575060c08110801590612865575060f881105b156128735750600192915050565b60c08110156128a057612888600160b8614c96565b6128959060ff1682614c6c565b610e7c906001614b6d565b612888600160f8614c96565b80516000908190811a60808110156128c757600191506104ff565b60b88110156128ed576128db608082614c6c565b6128e6906001614b6d565b91506104ff565b60c081101561291a5760b78103600185019450806020036101000a855104600182018101935050506104ff565b60f881101561292e576128db60c082614c6c565b60019390930151602084900360f7016101000a900490920160f5190192915050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6129a6826000015160008151811061298b5761298b6144a9565b60200260200101518260ff16600860ff16600060ff16612c9b565b825180516000906129b9576129b96144a9565b6020026020010181815250505050565b6129a682600001516000815181106129e3576129e36144a9565b60200260200101518260ff16600460ff1660006008612a029190614b80565b60ff16612c9b565b6129a68260000151600081518110612a2457612a246144a9565b60200260200101518260ff16600460ff1660006008612a439190614b80565b612a4e906004614b80565b612a02906008614b80565b6129a68260000151600081518110612a7357612a736144a9565b60200260200101518260ff16600860ff1660006008612a929190614b80565b612a02906004614b80565b6129a68260000151600081518110612ab757612ab76144a9565b60200260200101518260ff16600860ff1660006008612ad69190614b80565b612ae1906004614b80565b612aec906008614b80565b612af7906004614b80565b612b02906010614b80565b612b0d906018614b80565b612b18906020614b80565b612b23906020614b80565b612a02906020614b80565b61064e81604051602401612b4291906131fe565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611fa6565b6129a68260000151600081518110612b8b57612b8b6144a9565b60200260200101518262ffffff16601860ff1660006008612bac9190614b80565b612bb7906004614b80565b612bc2906008614b80565b612bcd906004614b80565b612a02906010614b80565b6129a68260000151600081518110612bf257612bf26144a9565b60200260200101518263ffffffff16602060ff1660006008612c149190614b80565b612c1f906004614b80565b612c2a906008614b80565b612c35906004614b80565b612c40906010614b80565b612a02906018614b80565b6129a68260000151600081518110612c6557612c656144a9565b60200260200101518261ffff16601060ff1660006008612c859190614b80565b612c90906004614b80565b612a92906008614b80565b600083821b8183612caf600180881b614c6c565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215612d15579160200282015b82811115612d15578251825591602001919060010190612cfa565b50612d21929150612dae565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115612d215760008155600101612daf565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405290565b60405160a081016001600160401b0381118282101715612dfc57612dfc612dc3565b604080519081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051608081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405161018081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051606081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405161016081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051601f8201601f191681016001600160401b0381118282101715612ef857612ef8612dc3565b604052919050565b6001600160a01b038116811461064e57600080fd5b803561146981612f00565b803563ffffffff8116811461146957600080fd5b60ff8116811461064e57600080fd5b803561146981612f34565b803561ffff8116811461146957600080fd5b60006101408284031215612f7357600080fd5b612f7b612dd9565b612f8483612f15565b8152612f9260208401612f15565b6020820152612fa360408401612f15565b6040820152612fb460608401612f20565b6060820152612fc560808401612f20565b6080820152612fd660a08401612f15565b60a0820152612fe760c08401612f43565b60c0820152612ff860e08401612f4e565b60e082015261010061300b818501612f43565b9082015261012061301d848201612f43565b908201529392505050565b60006001600160401b0382111561304157613041612dc3565b50601f01601f191660200190565b600082601f83011261306057600080fd5b813561307361306e82613028565b612ed0565b81815284602083860101111561308857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156130c257600080fd5b88356130cd81612f00565b975060208901356130dd81612f00565b965060408901356130ed81612f00565b95506130fb60608a01612f20565b9450608089013561310b81612f00565b935061311960a08a01612f20565b925060c08901356001600160401b0381111561313457600080fd5b6131408b828c0161304f565b92505061314f60e08a01612f4e565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156131a35783518252928401926001929092019190840190613183565b509695505050505050565b60005b838110156131c95781810151838201526020016131b1565b50506000910152565b600081518084526131ea8160208601602086016131ae565b601f01601f19169290920160200192915050565b602081526000610e7c60208301846131d2565b60008060008060008060c0878903121561322a57600080fd5b863561323581612f00565b9550602087013561324581612f00565b945061325360408801612f20565b9350606087013561326381612f00565b925061327160808801612f20565b915061327f60a08801612f4e565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156132cc5783516001600160a01b0316835292840192918401916001016132a7565b50909695505050505050565b600080600080608085870312156132ee57600080fd5b6132f785612f20565b935061330560208601612f4e565b9250604085013561331581612f34565b915060608501356001600160401b0381111561333057600080fd5b61333c8782880161304f565b91505092959194509250565b60006001600160401b0382111561336157613361612dc3565b5060051b60200190565b6000602080838503121561337e57600080fd5b82356001600160401b038082111561339557600080fd5b818501915085601f8301126133a957600080fd5b81356133b761306e82613348565b81815260059190911b830184019084810190888311156133d657600080fd5b8585015b8381101561039b578035858111156133f25760008081fd5b6134008b89838a010161304f565b8452509186019186016133da565b600080600080600060a0868803121561342657600080fd5b61342f86612f20565b945061343d60208701612f4e565b935061344b60408701612f4e565b9250606086013561345b81612f34565b915060808601356001600160401b0381111561347657600080fd5b6134828882890161304f565b9150509295509295909350565b600082601f8301126134a057600080fd5b813560206134b061306e83613348565b82815260059290921b840181019181810190868411156134cf57600080fd5b8286015b848110156131a35780356001600160401b03808211156134f257600080fd5b9088019060a0828b03601f1901121561350a57600080fd5b613512612e02565b8683013561351f81612f34565b815260408381013561353081612f00565b828901526060848101358284015260808501359083015260a08401358381111561355a5760008081fd5b8085019450508b603f85011261357257600092508283fd5b87840135925061358461306e84613348565b83815260069390931b8401810192888101908d8511156135a45760008081fd5b948201945b848610156135fb5782868f0312156135c15760008081fd5b6135c9612e24565b6135d287612f20565b81528a8701358060040b81146135e85760008081fd5b818c0152825294820194908901906135a9565b60808401525050855250509183019183016134d3565b60006080828403121561362357600080fd5b61362b612e46565b9050813561363881612f00565b8152602082013561364881612f34565b602082015260408201356001600160401b038082111561366757600080fd5b6136738583860161304f565b6040840152606084013591508082111561368c57600080fd5b506136998482850161304f565b60608301525092915050565b600080604083850312156136b857600080fd5b82356001600160401b03808211156136cf57600080fd5b9084019060a082870312156136e357600080fd5b6136eb612e02565b82356136f681612f00565b8152602083013561370681612f00565b6020820152604083013561371981612f00565b604082015260608301358281111561373057600080fd5b8301610180818903121561374357600080fd5b61374b612e68565b61375482612f15565b815261376260208301612f15565b602082015261377360408301612f15565b604082015261378460608301612f15565b60608201526080820135608082015260a082013560a08201526137a960c08301612f20565b60c08201526137ba60e08301612f20565b60e08201526101006137cd818401612f20565b908201526101206137df838201612f43565b9082015261014082810135858111156137f757600080fd5b6138038b82860161348f565b828401525050610160808301358581111561381d57600080fd5b6138298b82860161304f565b828401525050806060840152505061384360808401612f43565b60808201529350602085013591508082111561385e57600080fd5b5061386b85828601613611565b9150509250929050565b6020815260018060a01b03825116602082015260ff602083015116604082015260006040830151608060608401526138b060a08401826131d2565b90506060840151601f19848303016080850152610d4e82826131d2565b600082601f8301126138de57600080fd5b813560206138ee61306e83613348565b82815260059290921b8401810191818101908684111561390d57600080fd5b8286015b848110156131a35780358352918301918301613911565b600082601f83011261393957600080fd5b8135602061394961306e83613348565b82815260059290921b8401810191818101908684111561396857600080fd5b8286015b848110156131a357803561397f81612f00565b835291830191830161396c565b600082601f83011261399d57600080fd5b813560206139ad61306e83613348565b82815260059290921b840181019181810190868411156139cc57600080fd5b8286015b848110156131a35780356001600160401b03808211156139ef57600080fd5b90880190601f196080838c0382011215613a0857600080fd5b613a10612e46565b8784013583811115613a2157600080fd5b84016060818e0384011215613a3557600080fd5b613a3d612e8b565b925088810135613a4c81612f34565b8352604081810135613a5d81612f00565b848b0152606082013585811115613a7357600080fd5b613a818f8c838601016138cd565b8286015250838352613a94818701612f43565b8a8401526060860135935084841115613aac57600080fd5b613aba8e8b86890101613928565b90830152506080840135915082821115613ad357600080fd5b613ae18c89848701016138cd565b606082015286525050509183019183016139d0565b600082601f830112613b0757600080fd5b81356020613b1761306e83613348565b82815260059290921b84018101918181019086841115613b3657600080fd5b8286015b848110156131a35780356001600160401b03811115613b595760008081fd5b613b678986838b010161304f565b845250918301918301613b3a565b600082601f830112613b8657600080fd5b81356020613b9661306e83613348565b82815260059290921b84018101918181019086841115613bb557600080fd5b8286015b848110156131a35780356001600160401b0380821115613bd95760008081fd5b9088019060a0828b03601f1901811315613bf35760008081fd5b613bfb612e02565b8784013583811115613c0d5760008081fd5b613c1b8d8a8388010161398c565b8252506040613c2b818601612f43565b898301526060613c3c818701612f15565b82840152608091508186013585811115613c565760008081fd5b613c648f8c838a0101613928565b82850152505082850135925083831115613c7e5760008081fd5b613c8c8d8a85880101613af6565b908201528652505050918301918301613bb9565b600082601f830112613cb157600080fd5b81356020613cc161306e83613348565b82815260059290921b84018101918181019086841115613ce057600080fd5b8286015b848110156131a3578035613cf781612f34565b8352918301918301613ce4565b80356001600160401b038116811461146957600080fd5b600082601f830112613d2c57600080fd5b81356020613d3c61306e83613348565b82815260059290921b84018101918181019086841115613d5b57600080fd5b8286015b848110156131a35780356001600160401b0380821115613d7f5760008081fd5b90880190610160828b03601f1901811315613d9a5760008081fd5b613da2612ead565b613dad888501612f4e565b81526040613dbc818601612f4e565b898301526060613dcd818701612f43565b8284015260809150613de0828701612f20565b9083015260a0613df1868201612f43565b8284015260c09150613e04828701612f20565b9083015260e0613e15868201612f20565b828401526101009150613e29828701613d04565b908301526101208581013585811115613e425760008081fd5b613e508f8c838a0101613928565b838501525061014091508186013585811115613e6c5760008081fd5b613e7a8f8c838a0101613af6565b828501525050613e8b838601612f15565b908201528652505050918301918301613d5f565b600082601f830112613eb057600080fd5b81356020613ec061306e83613348565b82815260059290921b84018101918181019086841115613edf57600080fd5b8286015b848110156131a35780356001600160401b0380821115613f035760008081fd5b9088019060a0828b03601f1901811315613f1d5760008081fd5b613f25612e02565b613f30888501612f20565b815260408085013584811115613f465760008081fd5b613f548e8b8389010161304f565b8a8401525060608086013585811115613f6d5760008081fd5b613f7b8f8c838a010161304f565b8385015250608091508186013585811115613f965760008081fd5b613fa48f8c838a010161304f565b828501525050613fb5838601612f43565b908201528652505050918301918301613ee3565b60008060408385031215613fdc57600080fd5b613fe583612f20565b915060208301356001600160401b038082111561400157600080fd5b90840190610160828703121561401657600080fd5b61401e612ead565b82358281111561402d57600080fd5b61403988828601613b75565b82525060208301358281111561404e57600080fd5b61405a88828601613ca0565b60208301525060408301358281111561407257600080fd5b61407e88828601613d1b565b60408301525060608301358281111561409657600080fd5b6140a288828601613e9f565b6060830152506080830135828111156140ba57600080fd5b6140c688828601613ca0565b60808301525060a0830135828111156140de57600080fd5b6140ea88828601613928565b60a08301525060c08301358281111561410257600080fd5b61410e88828601613928565b60c08301525061412060e08401612f20565b60e0820152610100614133818501612f20565b90820152610120614145848201612f43565b90820152610140838101358381111561415d57600080fd5b6141698982870161304f565b8284015250508093505050509250929050565b60006020828403121561418e57600080fd5b81356001600160401b03808211156141a557600080fd5b9083019061016082860312156141ba57600080fd5b6141c2612ead565b6141cb83612f15565b81526141d960208401612f15565b60208201526141ea60408401612f20565b60408201526141fb60608401612f4e565b606082015261420c60808401612f4e565b608082015261421d60a08401612f43565b60a082015261422e60c08401612f15565b60c082015261423f60e08401612f20565b60e0820152610100614252818501612f15565b90820152610120614264848201612f43565b90820152610140838101358381111561427c57600080fd5b6142888882870161304f565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156142ee57603f198886030184526142dc8583516131d2565b945092850192908501906001016142c0565b5092979650505050505050565b60006020828403121561430d57600080fd5b81356001600160401b0381111561432357600080fd5b61159384828501613928565b60008060006060848603121561434457600080fd5b61434d84612f20565b925061435b60208501612f4e565b9150604084013561436b81612f34565b809150509250925092565b60006020828403121561438857600080fd5b8135610e7c81612f00565b600081518084526020808501945080840160005b838110156143c657815160ff16875295820195908201906001016143a7565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561444857888303603f190185528151805187855261441c88860182614393565b91890151858303868b01529190506144348183614393565b9689019694505050908601906001016143f8565b509098975050505050505050565b600082516144688184602087016131ae565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016144e7576144e76144bf565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600063ffffffff8084168061456a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b83815261012081016145f46020830185614576565b63ffffffff8316610100830152949350505050565b8051801515811461146957600080fd5b6000806040838503121561462c57600080fd5b61463583614609565b9150602083015190509250929050565b92835260208301919091526001600160a01b0316604082015260600190565b600061014060ff87168352856020840152806040840152614687818401866131d2565b915050610d4e6060830184614576565b60006146a561306e84613028565b90508281528383830111156146b957600080fd5b610e7c8360208301846131ae565b600082601f8301126146d857600080fd5b815160206146e861306e83613348565b82815260059290921b8401810191818101908684111561470757600080fd5b8286015b848110156131a35780516001600160401b0381111561472a5760008081fd5b8701603f8101891361473c5760008081fd5b61474d898683015160408401614697565b84525091830191830161470b565b60006020828403121561476d57600080fd5b81516001600160401b0381111561478357600080fd5b611593848285016146c7565b805161146981612f00565b6000602082840312156147ac57600080fd5b8151610e7c81612f00565b805161146981612f34565b600082601f8301126147d357600080fd5b815160206147e361306e83613348565b82815260059290921b8401810191818101908684111561480257600080fd5b8286015b848110156131a35780518352918301918301614806565b600082601f83011261482e57600080fd5b8151602061483e61306e83613348565b82815260059290921b8401810191818101908684111561485d57600080fd5b8286015b848110156131a357805161487481612f00565b8352918301918301614861565b600082601f83011261489257600080fd5b815160206148a261306e83613348565b82815260059290921b840181019181810190868411156148c157600080fd5b8286015b848110156131a35780516001600160401b03808211156148e457600080fd5b90880190601f196080838c03820112156148fd57600080fd5b614905612e46565b878401518381111561491657600080fd5b84016060818e038401121561492a57600080fd5b614932612e8b565b92508881015161494181612f34565b835260408181015161495281612f00565b848b015260608201518581111561496857600080fd5b6149768f8c838601016147c2565b82860152508383526149898187016147b7565b8a84015260608601519350848411156149a157600080fd5b6149af8e8b8689010161481d565b908301525060808401519150828211156149c857600080fd5b6149d68c89848701016147c2565b606082015286525050509183019183016148c5565b600080604083850312156149fe57600080fd5b614a0783614609565b915060208301516001600160401b0380821115614a2357600080fd5b9084019060a08287031215614a3757600080fd5b614a3f612e02565b825182811115614a4e57600080fd5b614a5a88828601614881565b825250614a69602084016147b7565b6020820152614a7a6040840161478f565b6040820152606083015182811115614a9157600080fd5b614a9d8882860161481d565b606083015250608083015182811115614ab557600080fd5b614ac1888286016146c7565b6080830152508093505050509250929050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808201808211156114a9576114a96144bf565b60ff81811683821601908111156114a9576114a96144bf565b84815263ffffffff8416602082015260ff831660408201526101408101610d4e6060830184614576565b604081526000614bd660408301856131d2565b905082151560208301529392505050565b604081526000614bfa60408301856131d2565b90508260208301529392505050565b600060208284031215614c1b57600080fd5b81516001600160401b03811115614c3157600080fd5b8201601f81018413614c4257600080fd5b61159384825160208401614697565b61ffff8181168382160190808211156104ff576104ff6144bf565b818103818111156114a9576114a96144bf565b80820281158282048414176114a9576114a96144bf565b60ff82811682821603908111156114a9576114a96144bf56fe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a2646970667358221220c99c39be8190c900cc79baa1e23fa4849b4f0509cdeed78844d9846cbb081e5664736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101175760003560e01c8063715018a6116100a8578063715018a6146102175780638129fc1c1461021f5780638da5cb5b1461022757806395edcb081461022f578063a903620c1461024f578063af84b51f14610262578063b41bd78914610282578063b4b7035214610295578063d0d35b55146102a8578063f2fde38b146102bb578063f2fe4fa5146102ce57600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b157806361091ef3146101c657806362329cc5146101f15780636dabaf0414610204575b600080fd5b61013061012a366004612f60565b50600090565b60405190151581526020015b60405180910390f35b6101586101533660046130a5565b6102dd565b60405161013c919061315e565b6040805160208101909152600081525b60405161013c91906131fe565b610195610190366004613211565b610377565b60405161013c919061328b565b6040516000815260200161013c565b6101c46101bf3660046132d8565b6103a8565b005b6067546101d9906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101956101ff36600461336b565b610429565b61013061021236600461340e565b610506565b6101c46105a1565b6101c46105dc565b6101d9610651565b61024261023d3660046136a5565b610660565b60405161013c9190613875565b6101c461025d366004613fc9565b610b7d565b61027561027036600461417c565b610bfa565b60405161013c9190614299565b6101c46102903660046142fb565b610d57565b6101306102a3366004612f60565b610df9565b6101756102b636600461432f565b610e6c565b6101c46102c9366004614376565b610e83565b606060405161013c91906143d1565b60408051602081019091526060815260006102fe8a898989898e6000610f20565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035d57602002820191906000526020600020905b815481526020019060010190808311610349575b5050509190925250919d9c50505050505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505b5098975050505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103e09190614456565b90815260405190819003602001902054336001600160a01b03909116146104225760405162461bcd60e51b815260040161041990614472565b60405180910390fd5b5050505050565b6060600082516001600160401b0381111561044657610446612dc3565b60405190808252806020026020018201604052801561046f578160200160208202803683370190505b50905060005b81518110156104ff576065848281518110610492576104926144a9565b60200260200101516040516104a79190614456565b9081526040519081900360200190205482516001600160a01b03909116908390839081106104d7576104d76144a9565b6001600160a01b03909216602092830291909101909101526104f8816144d5565b9050610475565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516105479190614456565b90815260405190819003602001902054336001600160a01b03909116146105805760405162461bcd60e51b815260040161041990614472565b60ff84166105945761059487878786610f8f565b5060019695505050505050565b336105aa610651565b6001600160a01b0316146105d05760405162461bcd60e51b8152600401610419906144ee565b6105da600061138f565b565b60006105e860016113e1565b90508015610600576000805461ff0019166101001790555b61060861146e565b801561064e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506065816040516106b29190614456565b90815260405190819003602001902054336001600160a01b03909116146106eb5760405162461bcd60e51b815260040161041990614472565b30835260608401516000906106ff9061149d565b905060008560600151610100015161071a87606001516114af565b61072788606001516114ce565b60405160200161073993929190614523565b60405160208183030381529060405280519060200120905060006107756107708460008a606001516114f39092919063ffffffff16565b61154d565b905060006107cc338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff166000146107b9578c6060015160e001516107c3565b8c6060015160c001515b8d516000610f20565b90506107d8888361159b565b60001960ff8316016108365760006127106107f68a606001516115fa565b6108009190614545565b905060006108216107708760018d606001516114f39092919063ffffffff16565b905061082f8583838d611635565b5050610b45565b60011960ff831601610a0557600080606760009054906101000a90046001600160a01b03166001600160a01b0316636a503493866040518060e001604052808e60600151602001516001600160a01b031681526020018e60600151610100015163ffffffff1681526020016108ae8f606001516114af565b61ffff1681526020016108c48f606001516114ce565b61ffff1681526020018e602001516001600160a01b031681526020018e6060015160e0015163ffffffff1681526020018e600001516001600160a01b03168152508d6060015160e001516040518463ffffffff1660e01b815260040161092c939291906145df565b60408051808303816000875af115801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096e9190614619565b915091506109aa604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b8152508361174e565b6109e2604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b81525082611797565b81156109fa576109f48a8486846117dc565b5061082f565b61082f8a84866118f5565b60021960ff831601610aa9576067546060890151610140015180516001600160a01b039092169163bac49a70918691600090610a4357610a436144a9565b6020026020010151606001518b600001516040518463ffffffff1660e01b8152600401610a7293929190614645565b600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b50505050610b45565b60031960ff831601610b45576060880151600090610acd90610770908760016114f3565b6067548a51604051630e842aef60e01b81529293506001600160a01b0390911691630e842aef91610b049188918691600401614645565b600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b50505050610b42898385846117dc565b50505b60ff821660011480610b5a575060ff82166003145b15610b6a57610b6a8882846118f5565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b815250606581604051610bbc9190614456565b90815260405190819003602001902054336001600160a01b0390911614610bf55760405162461bcd60e51b815260040161041990614472565b505050565b60606000826040015183606001518460800151604051602001610c1f93929190614523565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526067546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a92610d09929188918890600401614664565b600060405180830381865afa158015610d26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4e919081019061475b565b95945050505050565b33610d60610651565b6001600160a01b031614610d865760405162461bcd60e51b8152600401610419906144ee565b610d8f81611954565b604080518082018252601481527323aaa2a9a9afa420a7222622a92fa422a62822a960611b60208201529051606591610dc791614456565b90815260405190819003602001902054606780546001600160a01b0319166001600160a01b0390921691909117905550565b600060405180604001604052806006815260200165456e67696e6560d01b815250606581604051610e2a9190614456565b90815260405190819003602001902054336001600160a01b0390911614610e635760405162461bcd60e51b815260040161041990614472565b50600092915050565b6040805160208101909152600081525b9392505050565b33610e8c610651565b6001600160a01b031614610eb25760405162461bcd60e51b8152600401610419906144ee565b6001600160a01b038116610f175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610419565b61064e8161138f565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b6000610f9a82611a76565b90506000858585604051602001610fb393929190614523565b60408051601f19818403018152828252805160209182012060c0840183526000808552918401829052918301819052606083018190526080830181905260a08301529150611002846000611a8b565b6001600160a01b03168152611018846001611ad6565b61ffff16602082015261102c846002611ad6565b816040019061ffff16908161ffff1681525050600080336001600160a01b03166308536bfd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061479a565b6001600160a01b0316631424e30c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611107919061479a565b60405163161a012f60e11b815263ffffffff8b16600482015261ffff8a166024820152600160448201526001600160a01b039190911690632c34025e90606401600060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118c91908101906149eb565b91509150816111dd5760405162461bcd60e51b815260206004820152601f60248201527f5f757064617465417267732067726f7570536c6f74206e6f7420666f756e64006044820152606401610419565b600061120a82600001516000815181106111f9576111f96144a9565b602002602001015160000151611b21565b90508060008151811061121f5761121f6144a9565b602002602001015184608001818152505061123b876003611ad6565b61ffff908116606086015260208501511661128c5760405162461bcd60e51b815260206004820152601160248201527036bab63a34b83632a6b4b71032b93937b960791b6044820152606401610419565b836020015161ffff16846040015161ffff16116112df5760405162461bcd60e51b815260206004820152601160248201527036bab63a34b83632a6b0bc1032b93937b960791b6044820152606401610419565b60675460408051630d8bf71b60e31b81526004810188905286516001600160a01b039081166024830152602088015161ffff9081166044840152928801518316606483015260608801519092166084820152608087015160a482015260a087015160c4820152911690636c5fb8d89060e401600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b5050505050505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611428578160ff1660011480156114045750303b155b6114205760405162461bcd60e51b815260040161041990614ad4565b506000919050565b60005460ff80841691161061144f5760405162461bcd60e51b815260040161041990614ad4565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166114955760405162461bcd60e51b815260040161041990614b22565b6105da611d3d565b60606114a98230611d6d565b92915050565b60006114a98260a001516010600060086114c99190614b6d565b611e12565b60006114a98260a001516010600060086114e89190614b6d565b6114c9906010614b6d565b6114fb612cc0565b61152a8361150a846001614b80565b60ff168151811061151d5761151d6144a9565b6020026020010151611e31565b60028151811061153c5761153c6144a9565b602002602001015190509392505050565b80516000901580159061156257508151602110155b61156b57600080fd5b60008061157784611f3a565b8151919350915060208210156115935760208290036101000a90045b949350505050565b60006115aa8360600151611f81565b90508160ff168160ff1614610bf55760405162461bcd60e51b81526020600482015260166024820152752fb1b432b1b5a1a6a210313930b731b41032b93937b960511b6044820152606401610419565b60006114a98260a001516020600060086116149190614b6d565b61161f906010614b6d565b61162a906010614b6d565b6114e8906008614b6d565b606760009054906101000a90046001600160a01b03166001600160a01b031663e312064c8585856040518060e001604052808760600151602001516001600160a01b031681526020018760600151610100015163ffffffff1681526020016116a088606001516114af565b61ffff1681526020016116b688606001516114ce565b61ffff16815260200187602001516001600160a01b03168152602001876060015160c0015163ffffffff16815260200187600001516001600160a01b03168152506040518563ffffffff1660e01b81526004016117169493929190614b99565b600060405180830381600087803b15801561173057600080fd5b505af1158015611744573d6000803e3d6000fd5b5050505050505050565b6117938282604051602401611764929190614bc3565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052611fa6565b5050565b61179382826040516024016117ad929190614be7565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052611fa6565b6000806117e7611faf565b90506117ff6040518060200160405280606081525090565b6001606083015260ff851660021461181857600461181b565b60025b60ff168252604080516001808252818301909252906020808301908036833750505061014083015260408051600180825281830190925290602080830190803683375050506101608301819052805185919060009061187c5761187c6144a9565b60209081029190910101526001610120830152606660408301526118a08183611ff6565b60008681526066602090815260409091208251805184936118c5928492910190612cda565b509050508161016001516000815181106118e1576118e16144a9565b602002602001015192505050949350505050565b60006118ff611faf565b90506119176040518060200160405280606081525090565b606560408301526001602083015261192f8183611ff6565b6000848152606660209081526040909120825180518493611744928492910190612cda565b3361195d610651565b6001600160a01b0316146119835760405162461bcd60e51b8152600401610419906144ee565b60005b8151811015611793578181815181106119a1576119a16144a9565b602002602001015160658383815181106119bd576119bd6144a9565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a2a9190810190614c09565b604051611a379190614456565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055611a6f816144d5565b9050611986565b60606000610e7c611a86846125ee565b611e31565b600080611a9a611a86856125ee565b9050611593611ab7828560ff168151811061151d5761151d6144a9565b600281518110611ac957611ac96144a9565b6020026020010151612614565b600080611ae5611a86856125ee565b9050611593611b02828560ff168151811061151d5761151d6144a9565b600281518110611b1457611b146144a9565b602002602001015161154d565b60408051600280825260608083018452926000929190602083019080368337505084519192505060ff161580611b5b5750825160ff166001145b15611be1578260400151600181518110611b7757611b776144a9565b602002602001015181600081518110611b9257611b926144a9565b6020026020010181815250508260400151600281518110611bb557611bb56144a9565b602002602001015181600181518110611bd057611bd06144a9565b6020026020010181815250506114a9565b825160ff1660021901611c43578260400151600281518110611c0557611c056144a9565b602002602001015181600081518110611c2057611c206144a9565b6020026020010181815250508260400151600381518110611bb557611bb56144a9565b825160ff16600119016114a9576000611c5b8461262e565b90508060ff166002036104ff576000611c73856126b3565b90506000611c8086612707565b604087015190915060ff8216611c97846002614c51565b611ca19190614c51565b61ffff1681518110611cb557611cb56144a9565b602002602001015184600081518110611cd057611cd06144a9565b6020908102919091010152604086015160ff8216611cef846003614c51565b611cf99190614c51565b61ffff1681518110611d0d57611d0d6144a9565b602002602001015184600181518110611d2857611d286144a9565b60200260200101818152505050505092915050565b600054610100900460ff16611d645760405162461bcd60e51b815260040161041990614b22565b6105da3361138f565b60606000611d82611a868561016001516125ee565b905060005b8151811015611e07576000611dbc611daa84848151811061151d5761151d6144a9565b600081518110611ac957611ac96144a9565b9050846001600160a01b0316816001600160a01b031603611df657611dec83838151811061151d5761151d6144a9565b93505050506114a9565b50611e00816144d5565b9050611d87565b506060949350505050565b91821c91600080611e26600180861b614c6c565b909416949350505050565b6060611e3c82612771565b611e4557600080fd5b6000611e50836127ac565b90506000816001600160401b03811115611e6c57611e6c612dc3565b604051908082528060200260200182016040528015611ea557816020015b611e92612cc0565b815260200190600190039081611e8a5790505b5090506000611eb78560200151612831565b8560200151611ec69190614b6d565b90506000805b84811015611f2f57611edd836128ac565b9150604051806040016040528083815260200184815250848281518110611f0657611f066144a9565b6020908102919091010152611f1b8284614b6d565b925080611f27816144d5565b915050611ecc565b509195945050505050565b6000806000611f4c8460200151612831565b90506000818560200151611f609190614b6d565b90506000828660000151611f749190614c6c565b9196919550909350505050565b60006114a98260a00151600860006008611f9b9190614b6d565b6114e8906010614b6d565b61064e81612950565b611fb7612d25565b611fbf612d25565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612011578061200d816144d5565b9150505b8160e001516127101461202c5780612028816144d5565b9150505b816101000151612710146120485780612044816144d5565b9150505b6101408201515115158061206157506101608201515115155b8061207157506101a08201515115155b156120e35760008261016001515183610140015151116120b657826101a001515183610160015151116120aa57826101a00151516120be565b826101600151516120be565b826101400151515b90506120cb816004614c7f565b6120d59083614b6d565b60ff90911661012084015290505b61210d6040518060600160405280602e8152602001614cb0602e913983610120015160ff16611797565b806001600160401b0381111561212557612125612dc3565b60405190808252806020026020018201604052801561214e578160200160208202803683370190505b508352815161215e908490612971565b61216c8383602001516129c9565b61217a838360600151612a0a565b612188838360400151612a59565b61219783836101200151612a9d565b6121b8604051806060016040528060258152602001614cde60259139612b2e565b60008060019050836080015162ffffff16612710146121ed576121df858560800151612b71565b6121ea600183614c51565b91505b8360a0015163ffffffff166127101461221c5761220e858560a00151612bd8565b612219600283614c51565b91505b60c0840151156122625760c0840151855182612237816144d5565b935081518110612249576122496144a9565b602090810291909101015261225f600483614c51565b91505b8360e00151612710146122ab5760e0840151855182612280816144d5565b935081518110612292576122926144a9565b60209081029190910101526122a8600883614c51565b91505b836101000151612710146122f6576101008401518551826122cb816144d5565b9350815181106122dd576122dd6144a9565b60209081029190910101526122f3601083614c51565b91505b61012084015160ff16156125e45760005b84610120015160ff168110156125b25760008561014001515111801561233257508461014001515181105b1561238957846101400151818151811061234e5761234e6144a9565b602002602001015186600001518380612366906144d5565b945081518110612378576123786144a9565b6020026020010181815250506123b7565b855160009083612398816144d5565b9450815181106123aa576123aa6144a9565b6020026020010181815250505b6000856101600151511180156123d257508461016001515181105b156124295784610160015181815181106123ee576123ee6144a9565b602002602001015186600001518380612406906144d5565b945081518110612418576124186144a9565b602002602001018181525050612457565b855160009083612438816144d5565b94508151811061244a5761244a6144a9565b6020026020010181815250505b60008561018001515111801561247257508461018001515181105b156124cc57846101800151818151811061248e5761248e6144a9565b602002602001015160ff16866000015183806124a9906144d5565b9450815181106124bb576124bb6144a9565b6020026020010181815250506124f9565b85518190836124da816144d5565b9450815181106124ec576124ec6144a9565b6020026020010181815250505b6000856101a00151511180156125145750846101a001515181105b1561257457846101a001518181518110612530576125306144a9565b60200260200101516001600160a01b031686600001518380612551906144d5565b945081518110612563576125636144a9565b6020026020010181815250506125a2565b855160009083612583816144d5565b945081518110612595576125956144a9565b6020026020010181815250505b6125ab816144d5565b9050612307565b506125be602083614c51565b91506125e4604051806080016040528060448152602001614d0360449139865151611797565b6104228583612c4b565b6125f6612cc0565b50604080518082019091528151815260209182019181019190915290565b805160009060151461262557600080fd5b6114a98261154d565b6000600260ff16826000015160ff16036126ab576114a9826040015160008151811061265c5761265c6144a9565b6020026020010151600260ff16600060046126779190614b80565b612682906004614b80565b61268d906010614b80565b612698906002614b80565b6126a3906004614b80565b60ff16611e12565b506002919050565b805160009060ff16600214806126cd5750815160ff166003145b15611420576114a982604001516000815181106126ec576126ec6144a9565b6020026020010151601060ff16600060046126989190614b80565b805160009060ff16600214806127215750815160ff166003145b15611420576114a98260400151600081518110612740576127406144a9565b6020026020010151600260ff166000600461275b9190614b80565b612766906004614b80565b6126a3906010614b80565b8051600090810361278457506000919050565b6020820151805160001a9060c08210156127a2575060009392505050565b5060019392505050565b805160009081036127bf57506000919050565b6000806127cf8460200151612831565b84602001516127de9190614b6d565b90506000846000015185602001516127f69190614b6d565b90505b808210156128285761280a826128ac565b6128149083614b6d565b915082612820816144d5565b9350506127f9565b50909392505050565b8051600090811a608081101561284a5750600092915050565b60b8811080612865575060c08110801590612865575060f881105b156128735750600192915050565b60c08110156128a057612888600160b8614c96565b6128959060ff1682614c6c565b610e7c906001614b6d565b612888600160f8614c96565b80516000908190811a60808110156128c757600191506104ff565b60b88110156128ed576128db608082614c6c565b6128e6906001614b6d565b91506104ff565b60c081101561291a5760b78103600185019450806020036101000a855104600182018101935050506104ff565b60f881101561292e576128db60c082614c6c565b60019390930151602084900360f7016101000a900490920160f5190192915050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6129a6826000015160008151811061298b5761298b6144a9565b60200260200101518260ff16600860ff16600060ff16612c9b565b825180516000906129b9576129b96144a9565b6020026020010181815250505050565b6129a682600001516000815181106129e3576129e36144a9565b60200260200101518260ff16600460ff1660006008612a029190614b80565b60ff16612c9b565b6129a68260000151600081518110612a2457612a246144a9565b60200260200101518260ff16600460ff1660006008612a439190614b80565b612a4e906004614b80565b612a02906008614b80565b6129a68260000151600081518110612a7357612a736144a9565b60200260200101518260ff16600860ff1660006008612a929190614b80565b612a02906004614b80565b6129a68260000151600081518110612ab757612ab76144a9565b60200260200101518260ff16600860ff1660006008612ad69190614b80565b612ae1906004614b80565b612aec906008614b80565b612af7906004614b80565b612b02906010614b80565b612b0d906018614b80565b612b18906020614b80565b612b23906020614b80565b612a02906020614b80565b61064e81604051602401612b4291906131fe565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052611fa6565b6129a68260000151600081518110612b8b57612b8b6144a9565b60200260200101518262ffffff16601860ff1660006008612bac9190614b80565b612bb7906004614b80565b612bc2906008614b80565b612bcd906004614b80565b612a02906010614b80565b6129a68260000151600081518110612bf257612bf26144a9565b60200260200101518263ffffffff16602060ff1660006008612c149190614b80565b612c1f906004614b80565b612c2a906008614b80565b612c35906004614b80565b612c40906010614b80565b612a02906018614b80565b6129a68260000151600081518110612c6557612c656144a9565b60200260200101518261ffff16601060ff1660006008612c859190614b80565b612c90906004614b80565b612a92906008614b80565b600083821b8183612caf600180881b614c6c565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b828054828255906000526020600020908101928215612d15579160200282015b82811115612d15578251825591602001919060010190612cfa565b50612d21929150612dae565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b80821115612d215760008155600101612daf565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405290565b60405160a081016001600160401b0381118282101715612dfc57612dfc612dc3565b604080519081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051608081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405161018081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051606081016001600160401b0381118282101715612dfc57612dfc612dc3565b60405161016081016001600160401b0381118282101715612dfc57612dfc612dc3565b604051601f8201601f191681016001600160401b0381118282101715612ef857612ef8612dc3565b604052919050565b6001600160a01b038116811461064e57600080fd5b803561146981612f00565b803563ffffffff8116811461146957600080fd5b60ff8116811461064e57600080fd5b803561146981612f34565b803561ffff8116811461146957600080fd5b60006101408284031215612f7357600080fd5b612f7b612dd9565b612f8483612f15565b8152612f9260208401612f15565b6020820152612fa360408401612f15565b6040820152612fb460608401612f20565b6060820152612fc560808401612f20565b6080820152612fd660a08401612f15565b60a0820152612fe760c08401612f43565b60c0820152612ff860e08401612f4e565b60e082015261010061300b818501612f43565b9082015261012061301d848201612f43565b908201529392505050565b60006001600160401b0382111561304157613041612dc3565b50601f01601f191660200190565b600082601f83011261306057600080fd5b813561307361306e82613028565b612ed0565b81815284602083860101111561308857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156130c257600080fd5b88356130cd81612f00565b975060208901356130dd81612f00565b965060408901356130ed81612f00565b95506130fb60608a01612f20565b9450608089013561310b81612f00565b935061311960a08a01612f20565b925060c08901356001600160401b0381111561313457600080fd5b6131408b828c0161304f565b92505061314f60e08a01612f4e565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156131a35783518252928401926001929092019190840190613183565b509695505050505050565b60005b838110156131c95781810151838201526020016131b1565b50506000910152565b600081518084526131ea8160208601602086016131ae565b601f01601f19169290920160200192915050565b602081526000610e7c60208301846131d2565b60008060008060008060c0878903121561322a57600080fd5b863561323581612f00565b9550602087013561324581612f00565b945061325360408801612f20565b9350606087013561326381612f00565b925061327160808801612f20565b915061327f60a08801612f4e565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156132cc5783516001600160a01b0316835292840192918401916001016132a7565b50909695505050505050565b600080600080608085870312156132ee57600080fd5b6132f785612f20565b935061330560208601612f4e565b9250604085013561331581612f34565b915060608501356001600160401b0381111561333057600080fd5b61333c8782880161304f565b91505092959194509250565b60006001600160401b0382111561336157613361612dc3565b5060051b60200190565b6000602080838503121561337e57600080fd5b82356001600160401b038082111561339557600080fd5b818501915085601f8301126133a957600080fd5b81356133b761306e82613348565b81815260059190911b830184019084810190888311156133d657600080fd5b8585015b8381101561039b578035858111156133f25760008081fd5b6134008b89838a010161304f565b8452509186019186016133da565b600080600080600060a0868803121561342657600080fd5b61342f86612f20565b945061343d60208701612f4e565b935061344b60408701612f4e565b9250606086013561345b81612f34565b915060808601356001600160401b0381111561347657600080fd5b6134828882890161304f565b9150509295509295909350565b600082601f8301126134a057600080fd5b813560206134b061306e83613348565b82815260059290921b840181019181810190868411156134cf57600080fd5b8286015b848110156131a35780356001600160401b03808211156134f257600080fd5b9088019060a0828b03601f1901121561350a57600080fd5b613512612e02565b8683013561351f81612f34565b815260408381013561353081612f00565b828901526060848101358284015260808501359083015260a08401358381111561355a5760008081fd5b8085019450508b603f85011261357257600092508283fd5b87840135925061358461306e84613348565b83815260069390931b8401810192888101908d8511156135a45760008081fd5b948201945b848610156135fb5782868f0312156135c15760008081fd5b6135c9612e24565b6135d287612f20565b81528a8701358060040b81146135e85760008081fd5b818c0152825294820194908901906135a9565b60808401525050855250509183019183016134d3565b60006080828403121561362357600080fd5b61362b612e46565b9050813561363881612f00565b8152602082013561364881612f34565b602082015260408201356001600160401b038082111561366757600080fd5b6136738583860161304f565b6040840152606084013591508082111561368c57600080fd5b506136998482850161304f565b60608301525092915050565b600080604083850312156136b857600080fd5b82356001600160401b03808211156136cf57600080fd5b9084019060a082870312156136e357600080fd5b6136eb612e02565b82356136f681612f00565b8152602083013561370681612f00565b6020820152604083013561371981612f00565b604082015260608301358281111561373057600080fd5b8301610180818903121561374357600080fd5b61374b612e68565b61375482612f15565b815261376260208301612f15565b602082015261377360408301612f15565b604082015261378460608301612f15565b60608201526080820135608082015260a082013560a08201526137a960c08301612f20565b60c08201526137ba60e08301612f20565b60e08201526101006137cd818401612f20565b908201526101206137df838201612f43565b9082015261014082810135858111156137f757600080fd5b6138038b82860161348f565b828401525050610160808301358581111561381d57600080fd5b6138298b82860161304f565b828401525050806060840152505061384360808401612f43565b60808201529350602085013591508082111561385e57600080fd5b5061386b85828601613611565b9150509250929050565b6020815260018060a01b03825116602082015260ff602083015116604082015260006040830151608060608401526138b060a08401826131d2565b90506060840151601f19848303016080850152610d4e82826131d2565b600082601f8301126138de57600080fd5b813560206138ee61306e83613348565b82815260059290921b8401810191818101908684111561390d57600080fd5b8286015b848110156131a35780358352918301918301613911565b600082601f83011261393957600080fd5b8135602061394961306e83613348565b82815260059290921b8401810191818101908684111561396857600080fd5b8286015b848110156131a357803561397f81612f00565b835291830191830161396c565b600082601f83011261399d57600080fd5b813560206139ad61306e83613348565b82815260059290921b840181019181810190868411156139cc57600080fd5b8286015b848110156131a35780356001600160401b03808211156139ef57600080fd5b90880190601f196080838c0382011215613a0857600080fd5b613a10612e46565b8784013583811115613a2157600080fd5b84016060818e0384011215613a3557600080fd5b613a3d612e8b565b925088810135613a4c81612f34565b8352604081810135613a5d81612f00565b848b0152606082013585811115613a7357600080fd5b613a818f8c838601016138cd565b8286015250838352613a94818701612f43565b8a8401526060860135935084841115613aac57600080fd5b613aba8e8b86890101613928565b90830152506080840135915082821115613ad357600080fd5b613ae18c89848701016138cd565b606082015286525050509183019183016139d0565b600082601f830112613b0757600080fd5b81356020613b1761306e83613348565b82815260059290921b84018101918181019086841115613b3657600080fd5b8286015b848110156131a35780356001600160401b03811115613b595760008081fd5b613b678986838b010161304f565b845250918301918301613b3a565b600082601f830112613b8657600080fd5b81356020613b9661306e83613348565b82815260059290921b84018101918181019086841115613bb557600080fd5b8286015b848110156131a35780356001600160401b0380821115613bd95760008081fd5b9088019060a0828b03601f1901811315613bf35760008081fd5b613bfb612e02565b8784013583811115613c0d5760008081fd5b613c1b8d8a8388010161398c565b8252506040613c2b818601612f43565b898301526060613c3c818701612f15565b82840152608091508186013585811115613c565760008081fd5b613c648f8c838a0101613928565b82850152505082850135925083831115613c7e5760008081fd5b613c8c8d8a85880101613af6565b908201528652505050918301918301613bb9565b600082601f830112613cb157600080fd5b81356020613cc161306e83613348565b82815260059290921b84018101918181019086841115613ce057600080fd5b8286015b848110156131a3578035613cf781612f34565b8352918301918301613ce4565b80356001600160401b038116811461146957600080fd5b600082601f830112613d2c57600080fd5b81356020613d3c61306e83613348565b82815260059290921b84018101918181019086841115613d5b57600080fd5b8286015b848110156131a35780356001600160401b0380821115613d7f5760008081fd5b90880190610160828b03601f1901811315613d9a5760008081fd5b613da2612ead565b613dad888501612f4e565b81526040613dbc818601612f4e565b898301526060613dcd818701612f43565b8284015260809150613de0828701612f20565b9083015260a0613df1868201612f43565b8284015260c09150613e04828701612f20565b9083015260e0613e15868201612f20565b828401526101009150613e29828701613d04565b908301526101208581013585811115613e425760008081fd5b613e508f8c838a0101613928565b838501525061014091508186013585811115613e6c5760008081fd5b613e7a8f8c838a0101613af6565b828501525050613e8b838601612f15565b908201528652505050918301918301613d5f565b600082601f830112613eb057600080fd5b81356020613ec061306e83613348565b82815260059290921b84018101918181019086841115613edf57600080fd5b8286015b848110156131a35780356001600160401b0380821115613f035760008081fd5b9088019060a0828b03601f1901811315613f1d5760008081fd5b613f25612e02565b613f30888501612f20565b815260408085013584811115613f465760008081fd5b613f548e8b8389010161304f565b8a8401525060608086013585811115613f6d5760008081fd5b613f7b8f8c838a010161304f565b8385015250608091508186013585811115613f965760008081fd5b613fa48f8c838a010161304f565b828501525050613fb5838601612f43565b908201528652505050918301918301613ee3565b60008060408385031215613fdc57600080fd5b613fe583612f20565b915060208301356001600160401b038082111561400157600080fd5b90840190610160828703121561401657600080fd5b61401e612ead565b82358281111561402d57600080fd5b61403988828601613b75565b82525060208301358281111561404e57600080fd5b61405a88828601613ca0565b60208301525060408301358281111561407257600080fd5b61407e88828601613d1b565b60408301525060608301358281111561409657600080fd5b6140a288828601613e9f565b6060830152506080830135828111156140ba57600080fd5b6140c688828601613ca0565b60808301525060a0830135828111156140de57600080fd5b6140ea88828601613928565b60a08301525060c08301358281111561410257600080fd5b61410e88828601613928565b60c08301525061412060e08401612f20565b60e0820152610100614133818501612f20565b90820152610120614145848201612f43565b90820152610140838101358381111561415d57600080fd5b6141698982870161304f565b8284015250508093505050509250929050565b60006020828403121561418e57600080fd5b81356001600160401b03808211156141a557600080fd5b9083019061016082860312156141ba57600080fd5b6141c2612ead565b6141cb83612f15565b81526141d960208401612f15565b60208201526141ea60408401612f20565b60408201526141fb60608401612f4e565b606082015261420c60808401612f4e565b608082015261421d60a08401612f43565b60a082015261422e60c08401612f15565b60c082015261423f60e08401612f20565b60e0820152610100614252818501612f15565b90820152610120614264848201612f43565b90820152610140838101358381111561427c57600080fd5b6142888882870161304f565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156142ee57603f198886030184526142dc8583516131d2565b945092850192908501906001016142c0565b5092979650505050505050565b60006020828403121561430d57600080fd5b81356001600160401b0381111561432357600080fd5b61159384828501613928565b60008060006060848603121561434457600080fd5b61434d84612f20565b925061435b60208501612f4e565b9150604084013561436b81612f34565b809150509250925092565b60006020828403121561438857600080fd5b8135610e7c81612f00565b600081518084526020808501945080840160005b838110156143c657815160ff16875295820195908201906001016143a7565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561444857888303603f190185528151805187855261441c88860182614393565b91890151858303868b01529190506144348183614393565b9689019694505050908601906001016143f8565b509098975050505050505050565b600082516144688184602087016131ae565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016144e7576144e76144bf565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600063ffffffff8084168061456a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b83815261012081016145f46020830185614576565b63ffffffff8316610100830152949350505050565b8051801515811461146957600080fd5b6000806040838503121561462c57600080fd5b61463583614609565b9150602083015190509250929050565b92835260208301919091526001600160a01b0316604082015260600190565b600061014060ff87168352856020840152806040840152614687818401866131d2565b915050610d4e6060830184614576565b60006146a561306e84613028565b90508281528383830111156146b957600080fd5b610e7c8360208301846131ae565b600082601f8301126146d857600080fd5b815160206146e861306e83613348565b82815260059290921b8401810191818101908684111561470757600080fd5b8286015b848110156131a35780516001600160401b0381111561472a5760008081fd5b8701603f8101891361473c5760008081fd5b61474d898683015160408401614697565b84525091830191830161470b565b60006020828403121561476d57600080fd5b81516001600160401b0381111561478357600080fd5b611593848285016146c7565b805161146981612f00565b6000602082840312156147ac57600080fd5b8151610e7c81612f00565b805161146981612f34565b600082601f8301126147d357600080fd5b815160206147e361306e83613348565b82815260059290921b8401810191818101908684111561480257600080fd5b8286015b848110156131a35780518352918301918301614806565b600082601f83011261482e57600080fd5b8151602061483e61306e83613348565b82815260059290921b8401810191818101908684111561485d57600080fd5b8286015b848110156131a357805161487481612f00565b8352918301918301614861565b600082601f83011261489257600080fd5b815160206148a261306e83613348565b82815260059290921b840181019181810190868411156148c157600080fd5b8286015b848110156131a35780516001600160401b03808211156148e457600080fd5b90880190601f196080838c03820112156148fd57600080fd5b614905612e46565b878401518381111561491657600080fd5b84016060818e038401121561492a57600080fd5b614932612e8b565b92508881015161494181612f34565b835260408181015161495281612f00565b848b015260608201518581111561496857600080fd5b6149768f8c838601016147c2565b82860152508383526149898187016147b7565b8a84015260608601519350848411156149a157600080fd5b6149af8e8b8689010161481d565b908301525060808401519150828211156149c857600080fd5b6149d68c89848701016147c2565b606082015286525050509183019183016148c5565b600080604083850312156149fe57600080fd5b614a0783614609565b915060208301516001600160401b0380821115614a2357600080fd5b9084019060a08287031215614a3757600080fd5b614a3f612e02565b825182811115614a4e57600080fd5b614a5a88828601614881565b825250614a69602084016147b7565b6020820152614a7a6040840161478f565b6040820152606083015182811115614a9157600080fd5b614a9d8882860161481d565b606083015250608083015182811115614ab557600080fd5b614ac1888286016146c7565b6080830152508093505050509250929050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808201808211156114a9576114a96144bf565b60ff81811683821601908111156114a9576114a96144bf565b84815263ffffffff8416602082015260ff831660408201526101408101610d4e6060830184614576565b604081526000614bd660408301856131d2565b905082151560208301529392505050565b604081526000614bfa60408301856131d2565b90508260208301529392505050565b600060208284031215614c1b57600080fd5b81516001600160401b03811115614c3157600080fd5b8201601f81018413614c4257600080fd5b61159384825160208401614697565b61ffff8181168382160190808211156104ff576104ff6144bf565b818103818111156114a9576114a96144bf565b80820281158282048414176114a9576114a96144bf565b60ff82811682821603908111156114a9576114a96144bf56fe2d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320312d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a2646970667358221220c99c39be8190c900cc79baa1e23fa4849b4f0509cdeed78844d9846cbb081e5664736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
