ETH Price: $3,390.61 (-2.60%)
Gas: 1 Gwei

Token

Downbad (DOJAK)
 

Overview

Max Total Supply

69,420,000,000,000 DOJAK

Holders

159

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
58,688,287,559.19429543 DOJAK

Value
$0.00
0xc2b8873babbd442c04558726767d91e63e3a378c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Downbad

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Downbad.sol
// SPDX-License-Identifier: NONE



/**⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣄⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣴⣶⣶⣦⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⣀⣴⡿⠛⠙⠛⠛⢻⡿⠿⠿⢷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⡾⠟⠋⠉⠀⠀⠀⠀⠉⠙⠛⠟⠿⠶⣶⣶⣴⡾⠟⠁⠀⠀⠀⣀⡴⠞⠀⠀⠀⠀⠉⠛⢷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣷⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠛⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠞⠁⣼⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠷⠶⢶⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠁⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠏⠀⠀⠈⠿⢦⣄⣀⢀⠀⣀⣀⣤⠶⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠏⠀⠀⠀⢠⡤⠶⠻⠋⠉⣻⠏⠈⠀⢀⣀⡤⠖⠚⠛⠋⠋⠑⠒⠓⠖⠦⠤⣤⣀⡤⡤⠤⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⢷⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⠀⠀⠀⠀⠈⠀⠀⠀⠀⠘⠀⢀⡤⠖⠋⠁⠀⠀⢀⣀⣠⣤⠦⠶⠦⠦⠤⣄⣀⣄⣄⣀⡀⠀⠀⠉⠉⠛⠲⠶⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣔⠀⠀⠀⠉⠻⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⢀⡄⠀⠀⠀⠀⠀⣸⡏⠀⠰⣶⠲⠚⠉⠉⠈⢀⣀⣤⣤⣤⣤⣤⣤⣤⣀⣀⢈⡉⠓⠲⠶⢤⣄⡀⠀⠀⠉⠉⠻⠲⠂⠀⠀⠀⠀⠀⠀⠀⡠⠴⠚⣃⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣟⣠⠴⠒⠋⠀⣠⠖⠚⠒⠋⠁⠀⠀⠀⢻⡄⠀⢀⣴⠾⠛⠉⠁⠁⣁⣡⣁⣅⣡⣉⣙⣋⠛⠛⠳⠦⠄⠈⠉⠳⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠀⠀⠀⠀⠀⠸⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⠉⠀⠀⢀⡴⠞⠁⠀⠀⠀⠀⣀⣀⣄⣤⡾⢃⡘⠋⠀⠀⢀⡴⠒⠋⢁⣠⡴⠶⠲⠲⢤⣉⠙⠶⢶⣄⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠉⠉⢹⠱⡂⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣴⠿⠉⠀⣠⠶⠞⠉⠀⠀⣀⣴⠾⠛⠉⠉⠈⠁⠀⠀⢸⡇⠀⢀⣰⠟⠀⣠⡶⠋⠁⠀⠀⠀⠀⠀⠉⠳⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡜⠁⣠⡤⠤⠄⠀⠀⠀⠑⠄⠈⠀⠀⠀⠀⠸⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡿⠁⢠⠴⠋⠁⠀⠀⣀⡴⠞⠋⢁⣠⡴⠶⠤⠤⠞⠛⠓⠂⠙⣠⡾⠃⣠⡾⠋⠀⢀⣀⣄⣄⣀⣀⠀⠀⠀⠀⠙⢶⡄⠀⠀⠀⠀⠀⠀⠀⢀⠄⠼⢿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡿⠁⠀⠀⠀⢀⡴⠖⠋⠁⣠⡴⠞⠋⠁⠀⠀⣀⣠⣀⣄⡤⠴⠋⢉⣠⠾⠋⢀⡤⠞⠋⠁⠉⠉⠙⠛⠛⢦⡀⠀⠀⠀⠉⠓⠖⠀⠀⠀⠀⠀⠉⠙⠞⠉⠀⠀⠀⠀⠀⠐⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡿⠁⠀⠀⠀⠀⠈⠀⢀⡴⠞⠉⠀⢀⡴⠶⠓⠛⠉⠈⠈⢀⣀⡤⠶⠋⠁⢀⣴⠏⠀⠀⠀⠀⠀⣀⣀⣀⡀⠀⠙⠶⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠃⠀⠀⠀⠀⠀⣠⡾⠋⠀⢀⣠⠾⠋⠀⠀⣀⣠⡤⠶⠛⠋⠉⠀⢀⣠⡴⠛⠁⠀⣀⡴⠟⠋⠛⠉⠈⠉⠙⠶⢦⣤⣀⠙⠛⠛⠛⠋⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡇⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠊⢁⣠⠶⠒⠋⠉⠀⠀⠀⣀⣤⠴⠖⠋⠀⣀⣤⠶⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠷⣆⡀⣀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡟⠀⠀⠀⠀⠀⠀⠀⠀⠰⠋⠀⡴⠛⠀⢀⣀⡤⠴⠲⠚⠉⠉⠀⣀⣠⠶⠚⠉⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⢿⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠞⠉⠀⠀⣀⣀⡤⠴⠒⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣩⣤⣤⣤⣤⣤⣬⠙⠳⣄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠹⠆⠀⠀⠀⠀⠀⠀⠀⠻⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣩⠥⠤⠶⠓⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠁⠂⠀⠂⠀⠐⠈⠛⠻⠶⣮⣍⡃⠀⠀⠀⠀⠀⢀⣰⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣤⡀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣹⣇⣠⣶⠄⠀⠀⠀⠀⠀⠀⠀⣀⠚⠡⠤⣴⢶⢶⢶⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠿⣎⠀⠀⠀⠀⠀⠙⣿⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠶⠿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣿⠟⠋⠁⠀⠀⠀⠀⠀⣀⠴⢫⣭⡽⡿⠾⠚⡛⠿⠞⣿⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⢷⡄⠀⠂⠀⠀⠀⠀⠀⣰⠏⢧⡀⠀⠀⠀⠀⠉⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡿⠋⠀⠀⠀⠀⠀⠀⠀⣠⠖⣡⡗⠃⠠⠀⠀⠀⠄⠀⠀⠂⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠘⢷⣀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢽⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⠀⠀⠀⠀⠀⠀⠀⣠⢞⣵⠞⠃⢀⡤⠶⠤⠄⠀⠀⠀⠀⣀⠘⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⣠⣴⠏⠀⠀⢸⡏⠳⢶⡼⠓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠈⢻⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠈⣳⠟⠃⠁⠈⠈⠀⠀⠀⠀⠀⠀⠀⠀⢼⠀⠸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠋⠁⢘⠀⠀⠀⢠⠟⠀⠀⠉⢷⠶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠊⠉⠛⣦⡀⠐⡆⠀⠀⠀⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣺⠀⣦⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡴⠶⢦⢦⣤⣤⣀⣀⡀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡇⠀⠑⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣦⣧⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠦⠀⠀⠀⠞⢋⣤⣤⣤⣤⣤⣌⣙⠛⠛⠿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠈⢹⣆⠀⠀⠸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡿⠁⠀⡴⠛⠁⠀⠀⠀⠀⠀⢀⣀⣄⣤⣤⣤⣤⣤⣤⣄⡀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣺⢃⠀⠀⠠⠐⣐⣄⣢⣰⣰⣾⣶⣦⣙⣙⠍⠛⠻⡦⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣈⣹⡶⣦⣈⣳⣦⣨⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠅⠀⠀⠀⠀⠀⠀⠀⠀⢖⠛⢛⠛⡙⡙⠛⡋⠯⠫⢭⡙⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣞⣄⢠⣵⡿⠋⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣷⣧⣴⣀⠂⠀⢀⣤⠶⠀⢀⡞⢡⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠈⠀⠉⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣇⠀⠀⠀⠀⠀⠀⠀⠟⡛⣿⣿⣿⣿⣿⣾⡶⢶⣬⣤⣤⣂⢀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⢜⠹⢿⣦⣶⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⡍⠍⠇⠀⠘⠁⠀⠀⣺⡀⠸⠇⠀⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣧⡀⠀⠀⠀⠀⡈⠄⣺⣿⣿⣿⣿⣿⣿⠀⠀⠈⠉⠈⣿⣇⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣦⠙⣿⣏⢻⣿⣿⣿⣿⣿⠁⠀⠀⠉⣉⠝⡋⣡⢀⠀⠀⠀⠀⠀⠀⠘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠻⢿⣿⡐⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢤⣸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⡿⠆⡀⠀⠀⢺⣖⢘⣿⣿⣿⣿⣿⣿⣤⣀⣀⣄⣴⡿⢋⢴⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⠦⣟⠝⣶⣙⠿⣿⣿⣿⡠⠔⡂⣍⣤⠶⠟⠉⠸⠁⠀⠀⠀⠀⠀⠰⣄⡀⠀⠀⠀⠀⠀⠀⠀⢀⣽⢿⣿⣮⣂⢂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣧⠀⠀⠀⠀⡀⠍⠠⣻⣿⣿⠿⠟⡩⢂⣲⣿⣿⡏⠐⠀⠽⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠘⣧⣐⡙⡳⢦⣔⠐⠚⠻⠍⢕⠄⣌⡀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣦⣄⠀⠀⠀⠀⠀⠉⠠⠚⠀⠙⢻⣶⣅⠌⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⢀⡀⠀⠀⠀⠀⠠⠉⡁⢂⣅⣵⣾⡿⢟⣿⢱⡃⠀⠈⠐⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⡘⣿⣭⣓⡳⢊⠉⠍⢤⠺⠲⠓⠉⠁⠀⠀⠀⠛⠓⠂⠀⠀⠀⣀⣴⠛⠹⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⢻⣧⢁⠂⠀⠀⠀⠀⠶⣆⡀⠀⠀⠘⢿⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇⠈⠁⠀⣤⡄⠀⢠⠴⠶⠛⣙⡿⡛⣡⡿⡟⣸⠀⠀⠀⠡⣿⠃⢀⣤⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⢈⠳⣭⣙⠓⠷⠳⠋⢀⠠⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⢼⣿⡁⠀⠠⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⣿⣔⡐⠠⠀⠀⠀⠀⠸⢷⡄⠀⠀⠀⠹⢷⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⣄⣉⣀⠀⢀⠀⠲⠛⢁⠲⠚⣵⠎⢡⠇⠀⠀⠀⣱⡟⠀⠏⠁⠀⠀⠀⠀⠀⠀⠀⢲⣔⡔⡀⠀⠀⠀⠀⠀⠉⡉⢊⣂⡁⢄⣠⡀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠂⠀⠀⠀⠉⠙⠳⠶⢤⣀⣀⠀⠀⠀⠀⠀⠉⠛⠿⣷⣥⣅⡂⡀⠀⠀⠀⠀⠀⠀⠀⢸⠟⢷⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇⠀⠀⠈⠙⣩⣠⣠⣂⣅⣬⠴⢾⣾⠏⣥⡟⠁⠀⠀⠐⣼⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢮⣆⡢⢀⠀⠈⠀⠀⠈⠉⡙⠛⠋⠠⠀⠀⠀⠀⢀⣄⡀⠀⠀⣾⣿⡛⠧⣄⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠓⠷⠶⠲⠤⠀⠂⠈⠍⣻⣿⠀⠂⠀⠀⠀⠀⠀⠰⠚⠀⠈⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡆⠀⠀⠀⠈⠍⠉⡉⠈⠀⠌⠿⠃⠘⠃⠀⠀⠀⠀⢵⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣶⡐⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠻⣿⠙⢦⣈⠑⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣨⣾⠟⠅⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣿⠁⠀⠀⠀⠀⠀⠀⠀⢠⣶⠆⠀⠀⠀⠀⠀⠀⠀⣬⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣄⠀⠀⠀⠀⠀⠀⠘⣯⡆⡂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡄⠀⠈⠓⠦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣢⣿⠟⡁⠁⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡀⢀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠈⢿⣃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠿⠄⠀⠠⣠⠠⡀⢸⣿⣔⠀⠀⠀⠀⠀⠀⠰⠾⠶⣆⡄⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠈⠉⠛⠶⠦⣄⡀⠀⠀⠀⢀⢰⣾⠟⠡⠐⠀⣸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣷⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠻⢶⣄⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢾⣾⣿⣗⠅⠀⠀⠀⠀⠀⠀⠀⠀⠘⠃⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣲⣿⢗⠁⠁⠀⢠⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠒⢄⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣧⣀⠀⠀⠀⠀⠀⠀⣠⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠍⠛⠓⡧⣤⣵⡿⠗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠻⠗⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡾⡫⣿⠁⠄⠀⠀⠈⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠒⠾⠷⠲⠚⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣿⡇⠀⠀⠀⠀⠀⠈⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⣿⠟⠅⣺⡏⠀⠀⠀⠀⠀⣻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠹⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠳⣄⠀⠚⠚⠲⢦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠀⠀⠀⠀⠀⣀⣾⡿⠋⡈⠄⢿⠃⠄⠀⠀⠀⠀⢘⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⢷⣦⣤⣤⣤⣤⣤⣤⣠⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⠓⠒⢄⣀⣴⠛⢳⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠶⣆⡀⠙⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⡯⠀⠀⣤⣆⣵⡾⠏⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣥⣀⠀⠀⠀⠀⠉⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠘⡇⢶⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⠀⠸⡅⠀⠀⠀⠀⢀⠆⠀⠀⣧⠠⣽⡟⠩⠋⠁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢹⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣶⣤⣠⣠⣤⣤⣤⣤⣄⣀⡀⠀⢠⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠓⢾⣷⣷⠷⠾⢶⣦⡀⠀⠀⢸⠂⠀⢗⠀⠀⠀⠀⣾⠀⠀⠀⣿⣾⡟⡈⠄⠂⠁⠀⠀⠀⠀⠠⢤⣀⣄⡀⠀⠀⢀⣤⢶⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢻⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠙⢿⣶⡏⠀⠀⠀⠀⠀⠐⠾⠄⠀⠀⠀⢲⣷⡓⠳⠢⠄⠈⠁⠀⠔⠶⠌⠹⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣆⠀⢰⣿⡟⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⣳⣶⡶⠏⠁⢸⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡄⠀⠀⠀⠀⠀⠀⠀⠙⠻⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⠓⠀⠀⠀⠀⠀⠀⠀⠈⠹⣷⣼⡿⢁⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠉⡏⠀⠀⠀⢠⡞⠀⠉⢳⠒⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢦⣄⠀⠀⠀⠀⠀⠀⠀⣿⠻⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣽⡿⡑⢀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⠀⠀⠀⠃⠀⢰⠺⣯⡀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠑⠀⠈⢿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣲⡿⡃⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡃⠀⠀⠀⠀⠀⠀⠀⡼⠃⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡆⠀⠀⠀⠀⠀⠀⡴⠖⠛⢧⣄⣠⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⡿⡑⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡅⠀⠀⠀⠀⠀⠀⣠⡷⠀⠀⠀⠀⠛⠿⠻⠶⢶⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⠿⢷⣦⡀⢀⣠⣤⣶⣶⣶⣶⣦⣦⣤⣤⣤⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⠿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣵⡿⢁⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠆⠀⠀⠀⠀⢠⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢤⡌⠉⠻⢷⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠴⠶⠿⠟⠻⠛⠋⢡⡟⠁⠀⠀⠀⠀⠁⠉⠉⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠟⡈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡏⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠹⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣆⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠘⠇⠀⠀⠀⠀⠀⠀⣨⣾⠏⢂⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠠⣴⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣶⣴⣶⣶⣤⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⣿⡇⠀⠀⠀⣠⣶⣶⣤⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣆⢂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢠⣸⡿⡃⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⠁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣮⣌⣐⠠⢀⢤⡀⡀⢀⠀⡀⢀⢀⠀⠄⣠⣐⣬⣶⠿⡋⠅⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⡶⣾⣷⣾⣶⣶⣾⡶⡷⠿⠿⡛⠫⢉⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠠⠀⠄⠐⠀⠐⠀⠠⠀⠁⠠⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

Downbad (DOJAK)
Telegram: https://t.me/Down_Bad_ERC
Website:  https://downbad.wtf
Twitter:  https://twitter.com/DownBad_ERC
**/

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract Downbad is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    
    address payable private _taxWallet;

    uint256 public _initialBuyTax=35;
    uint256 public _initialSellTax=55;
    uint256 private _finalBuyTax=1;
    uint256 private _finalSellTax=2;
    uint256 public _reduceBuyTaxAt=69;
    uint256 public _reduceSellTaxAt=420;
    uint256 private _preventSwapBefore=30;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 8;
    
    
    string private constant _name = unicode"Downbad";
    string private constant _symbol = unicode"DOJAK";

    uint256 private constant _tTotal = 69420000000000 * 10**_decimals;
    uint256 private _tAirdrop =   5206500000382 * 10**_decimals;

    uint256 private _teamAlloc =   5206499999618 * 10**_decimals;
    uint256 private _treasuryAlloc =   6942000000000 * 10**_decimals;

    uint256 private _tLP =   52065000000000 * 10**_decimals;
    
    uint256 public _maxTxAmount =   500000000000 * 10**_decimals;
    uint256 public _maxWalletSize = 600000000000 * 10**_decimals;
    uint256 private _taxSwapThreshold = 500000000 * 10**_decimals;
    uint256 private _maxTaxSwap = 500000000 * 10**_decimals;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private airdropSent = false;

    bytes32 private merkleRootT1 = 0x711267132d1a3d16f02fed32c6ff46b8f70d68888060cb5a6249fcf86df22acd;
    bytes32 private merkleRootT2 = 0x40015cff0bf5278054a9d8361aa4f9d90f11aac439693f0f0630696788b39eeb;
    bytes32 private merkleRootT3 = 0xfa9a2fb29c23b8e3ea44367e9451e168e3ae2addce3fe752b6d046a9a248ca26;

    uint256 public airdropT1 = 8832061070 * 10**_decimals;
    uint256 public airdropT2 = 13248091604 * 10**_decimals;
    uint256 public airdropT3 = 17664122138 * 10**_decimals;
    uint256 private airdropClaimedAmt = 0;
    uint256 private teamClaimed = 0; 
    uint256 private teamClaimable = 0;

    address private _teamWallet = 0xA74dac13cAE81761cc0a5bdE511128B4c9808E7B;
    address private _treasuryWallet = 0xc81168bB34Efa64190Abbe6a741F19fdc30015ea;
    address private _deployerWallet = 0xe78e1D6b106F62BBfEb58a759E2Aa0A999E6a6fB;

    address payable private _teamTaxWallet;
    address payable private _treasuryTaxWallet;
    address payable private _deployerWithdrawWallet;

    uint256 private _startingBlock;
    uint256 private _lastTeamClaim;

    uint256 private _vestingRate = 30000000  * 10**_decimals;


    mapping(address=>bool) public airdropClaimed;

    constructor () {
        _treasuryTaxWallet = payable(_treasuryWallet);
        _deployerWithdrawWallet = payable(_deployerWallet);

        _balances[address(this)] = _tAirdrop + _tLP + _teamAlloc;
        _balances[ _treasuryWallet] = _treasuryAlloc;

        _lastTeamClaim = block.number;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;
        _isExcludedFromFee[_teamWallet] = true;
        _isExcludedFromFee[_treasuryWallet] = true;

        emit Transfer(address(0), address(this), _tAirdrop + _tLP);
        emit Transfer(address(0), _treasuryWallet, _treasuryAlloc);
        
    }


    function claimAirdrop(bytes32[] calldata _merkleProof, uint tier) public {
        require(!airdropClaimed[msg.sender], "Address has already claimed.");

        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));

        if(tier==1){
            require(verify(_merkleProof, merkleRootT1, leaf), "Invalid proof");
        } else if (tier==2){
            require(verify(_merkleProof, merkleRootT2, leaf), "Invalid proof");
        } else if(tier==3){
            require(verify(_merkleProof, merkleRootT3, leaf), "Invalid proof");
        }

        airdropClaimed[msg.sender] = true;

        if(tier==1){
            _balances[address(this)]=_balances[address(this)].sub(airdropT1);
            _balances[msg.sender]=_balances[msg.sender].add(airdropT1);
            airdropClaimedAmt = airdropClaimedAmt + airdropT1;
            emit Transfer(address(this), msg.sender, airdropT1);
        } else if (tier==2){
            _balances[address(this)]=_balances[address(this)].sub(airdropT2);
            _balances[msg.sender]=_balances[msg.sender].add(airdropT2);
            airdropClaimedAmt = airdropClaimedAmt + airdropT2;
            emit Transfer(address(this), msg.sender, airdropT2);
        } else if(tier==3){
            _balances[address(this)]=_balances[address(this)].sub(airdropT3);
            _balances[msg.sender]=_balances[msg.sender].add(airdropT3);
            airdropClaimedAmt = airdropClaimedAmt + airdropT3;
            emit Transfer(address(this), msg.sender, airdropT3);
        }
    }


   function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) private pure returns (bool){
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash < proofElement) {
                // Concatenate the hashes and recompute the hash
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Concatenate the hashes and recompute the hash
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash matches the root of the Merkle tree
        return computedHash == root;
    }


    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(balanceOf(from) >= amount, "Not enough tokens");
        uint256 taxAmount=0;
        if(block.number - _startingBlock < 2){
            bots[from] = true;
        }
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _buyCount++;
            }

            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);
            
            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            
            if (!inSwap && to == uniswapV2Pair && swapEnabled && (contractTokenBalance - _tAirdrop + airdropClaimedAmt - _teamAlloc + teamClaimed)>_taxSwapThreshold && _buyCount>_preventSwapBefore) {
                swapTokensForEth(min(amount,min((contractTokenBalance - _tAirdrop + airdropClaimedAmt - teamClaimable + teamClaimed),_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        // dont tax contract
        if(from==address(this)){
            taxAmount = 0;
        }
        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if(tokenAmount==0){return;}
        if(!tradingOpen){return;}
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function setLimits(uint256 maxTxAmount, uint256 maxWalletSize) external onlyOwner{
        _maxTxAmount = maxTxAmount;
        _maxWalletSize = maxWalletSize;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function setTaxes(uint256 buyTax, uint256 sellTax) external onlyOwner{
        _initialBuyTax = buyTax;
        _initialSellTax = sellTax;
    }

    function withdrawETH() external onlyOwner{
        _deployerWithdrawWallet.transfer(address(this).balance);
    }

    function sendETHToFee(uint256 amount) private {
        _treasuryTaxWallet.transfer(amount); 
    }

    function claimTeamAlloc() external {
        require(msg.sender == _teamWallet, "Invalid address");
        require(teamClaimable > 0, "Nothing to claim");
        
        _balances[_teamWallet] = _balances[_teamWallet] + teamClaimable;
        _balances[address(this)] = _balances[address(this)] - teamClaimable;

        emit Transfer(address(this), _teamWallet, teamClaimable);
        
        teamClaimed = teamClaimed + teamClaimable;
        teamClaimable = 0;
    }

    function updateTeamClaimable() external {
        require(teamClaimed < _teamAlloc, "Nothing to claim");
        
        teamClaimable = teamClaimable + _vestingRate.mul(block.number - _lastTeamClaim);

        if(teamClaimed + teamClaimable > _teamAlloc){
            teamClaimable = _teamAlloc - teamClaimed;
        }

        _lastTeamClaim = block.number;
    }

    function isBot(address a) public view returns (bool){
      return bots[a];
    }

    function provideLiquidityAndOpenTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),_tLP,0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        _startingBlock = block.number;
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender()==_treasuryTaxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }
    
    function addBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) public onlyOwner {
      for (uint i = 0; i < notbot.length; i++) {
          bots[notbot[i]] = false;
      }
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_initialBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initialSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reduceBuyTaxAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reduceSellTaxAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"airdropClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropT1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropT2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropT3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTeamAlloc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provideLiquidityAndOpenTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTeamClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260236006556037600755600160085560026009556045600a556101a4600b55601e600c556000600d556008600a6200003d919062000b17565b6504bc3b95427e62000050919062000b68565b600e556008600a62000063919062000b17565b6504bc3b953f8262000076919062000b68565b600f556008600a62000089919062000b17565b6506504f71ac006200009c919062000b68565b6010556008600a620000af919062000b17565b652f5a53d48a00620000c2919062000b68565b6011556008600a620000d5919062000b17565b64746a528800620000e7919062000b68565b6012556008600a620000fa919062000b17565b648bb2c970006200010c919062000b68565b6013556008600a6200011f919062000b17565b631dcd650062000130919062000b68565b6014556008600a62000143919062000b17565b631dcd650062000154919062000b68565b6015556000601760156101000a81548160ff0219169083151502179055506000601760166101000a81548160ff02191690831515021790555060006017806101000a81548160ff0219169083151502179055507f711267132d1a3d16f02fed32c6ff46b8f70d68888060cb5a6249fcf86df22acd60001b6018557f40015cff0bf5278054a9d8361aa4f9d90f11aac439693f0f0630696788b39eeb60001b6019557ffa9a2fb29c23b8e3ea44367e9451e168e3ae2addce3fe752b6d046a9a248ca2660001b601a556008600a6200022c919062000b17565b64020e6e8e8e6200023e919062000b68565b601b556008600a62000251919062000b17565b640315a5d5d462000263919062000b68565b601c556008600a62000276919062000b17565b64041cdd1d1a62000288919062000b68565b601d556000601e556000601f55600060205573a74dac13cae81761cc0a5bde511128b4c9808e7b602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c81168bb34efa64190abbe6a741f19fdc30015ea602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e78e1d6b106f62bbfeb58a759e2aa0a999e6a6fb602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600a620003a9919062000b17565b6301c9c380620003ba919062000b68565b602955348015620003ca57600080fd5b506000620003dd6200094c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f54601154600e5462000556919062000bb3565b62000562919062000bb3565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060105460016000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550436028819055506001600360006200062a6200095460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601154600e54620008a3919062000bb3565b604051620008b2919062000bff565b60405180910390a3602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040516200093e919062000bff565b60405180910390a362000c1c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a0b57808604811115620009e357620009e26200097d565b5b6001851615620009f35780820291505b808102905062000a0385620009ac565b9450620009c3565b94509492505050565b60008262000a26576001905062000af9565b8162000a36576000905062000af9565b816001811462000a4f576002811462000a5a5762000a90565b600191505062000af9565b60ff84111562000a6f5762000a6e6200097d565b5b8360020a91508482111562000a895762000a886200097d565b5b5062000af9565b5060208310610133831016604e8410600b841016171562000aca5782820a90508381111562000ac45762000ac36200097d565b5b62000af9565b62000ad98484846001620009b9565b9250905081840481111562000af35762000af26200097d565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b248262000b00565b915062000b318362000b0a565b925062000b607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a14565b905092915050565b600062000b758262000b00565b915062000b828362000b00565b925082820262000b928162000b00565b9150828204841483151762000bac5762000bab6200097d565b5b5092915050565b600062000bc08262000b00565b915062000bcd8362000b00565b925082820190508082111562000be85762000be76200097d565b5b92915050565b62000bf98162000b00565b82525050565b600060208201905062000c16600083018462000bee565b92915050565b6149008062000c2c6000396000f3fe6080604052600436106101e75760003560e01c80638da5cb5b11610102578063d1b6dd3011610095578063e086e5ec11610064578063e086e5ec146106cb578063e1b19258146106e2578063e2f60aef1461070d578063fb3501a114610724576101ee565b8063d1b6dd3014610611578063d34628cc1461064e578063d5c5ec5814610677578063dd62ed3e1461068e576101ee565b8063aa2d8b20116100d1578063aa2d8b2014610569578063c36956a014610594578063c4590d3f146105bf578063c647b20e146105e8576101ee565b80638da5cb5b146104ab5780638f9a55c0146104d657806395d89b4114610501578063a9059cbb1461052c576101ee565b80633b7cdccd1161017a5780635b6877e4116101495780635b6877e41461040157806370a082311461042c578063715018a6146104695780637d1db4a514610480576101ee565b80633b7cdccd1461036b5780633bbac579146103965780634c5b2de2146103d357806351bc3c85146103ea576101ee565b806323b872dd116101b657806323b872dd146102b1578063313ce567146102ee57806331c2d847146103195780633335252b14610342576101ee565b806306fdde03146101f3578063095ea7b31461021e5780630c1930451461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061020861074f565b60405161021591906134ec565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906135b6565b61078c565b6040516102529190613611565b60405180910390f35b34801561026757600080fd5b506102706107aa565b60405161027d919061363b565b60405180910390f35b34801561029257600080fd5b5061029b6107b0565b6040516102a8919061363b565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613656565b6107d6565b6040516102e59190613611565b60405180910390f35b3480156102fa57600080fd5b506103036108af565b60405161031091906136c5565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613828565b6108b8565b005b34801561034e57600080fd5b50610369600480360381019061036491906138cc565b6109e2565b005b34801561037757600080fd5b506103806111ea565b60405161038d919061363b565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061392c565b6111f0565b6040516103ca9190613611565b60405180910390f35b3480156103df57600080fd5b506103e8611246565b005b3480156103f657600080fd5b506103ff611528565b005b34801561040d57600080fd5b506104166115c5565b604051610423919061363b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061392c565b6115cb565b604051610460919061363b565b60405180910390f35b34801561047557600080fd5b5061047e611614565b005b34801561048c57600080fd5b50610495611767565b6040516104a2919061363b565b60405180910390f35b3480156104b757600080fd5b506104c061176d565b6040516104cd9190613968565b60405180910390f35b3480156104e257600080fd5b506104eb611796565b6040516104f8919061363b565b60405180910390f35b34801561050d57600080fd5b5061051661179c565b60405161052391906134ec565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e91906135b6565b6117d9565b6040516105609190613611565b60405180910390f35b34801561057557600080fd5b5061057e6117f7565b60405161058b919061363b565b60405180910390f35b3480156105a057600080fd5b506105a96117fd565b6040516105b6919061363b565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613983565b611803565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613983565b6118ff565b005b34801561061d57600080fd5b506106386004803603810190610633919061392c565b6119a6565b6040516106459190613611565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613828565b6119c6565b005b34801561068357600080fd5b5061068c611af0565b005b34801561069a57600080fd5b506106b560048036038101906106b091906139c3565b611ba4565b6040516106c2919061363b565b60405180910390f35b3480156106d757600080fd5b506106e0611c2b565b005b3480156106ee57600080fd5b506106f7611d2b565b604051610704919061363b565b60405180910390f35b34801561071957600080fd5b50610722611d31565b005b34801561073057600080fd5b5061073961226c565b604051610746919061363b565b60405180910390f35b60606040518060400160405280600781526020017f446f776e62616400000000000000000000000000000000000000000000000000815250905090565b60006107a0610799612272565b848461227a565b6001905092915050565b600a5481565b60006008600a6107c09190613b65565b653f231a70b8006107d19190613bb0565b905090565b60006107e3848484612443565b6108a4846107ef612272565b61089f856040518060600160405280602881526020016148a360289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610855612272565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e559092919063ffffffff16565b61227a565b600190509392505050565b60006008905090565b6108c0612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490613c3e565b60405180910390fd5b60005b81518110156109de5760006004600084848151811061097257610971613c5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109d690613c8d565b915050610950565b5050565b602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613d21565b60405180910390fd5b600033604051602001610a829190613d89565b60405160208183030381529060405280519060200120905060018203610b3457610af0848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060185483612eb9565b610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613df0565b60405180910390fd5b610c66565b60028203610bce57610b8a848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060195483612eb9565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613df0565b60405180910390fd5b610c65565b60038203610c6457610c24848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601a5483612eb9565b610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613df0565b60405180910390fd5b5b5b5b6001602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060018203610e7657610d1a601b54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db1601b54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601b54601e54610e049190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b54604051610e69919061363b565b60405180910390a36111e4565b6002820361102e57610ed2601c54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f69601c54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601c54601e54610fbc9190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051611021919061363b565b60405180910390a36111e3565b600382036111e25761108a601d54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611121601d54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d54601e546111749190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d546040516111d9919061363b565b60405180910390a35b5b5b50505050565b60065481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613e90565b60405180910390fd5b60006020541161131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613efc565b60405180910390fd5b60205460016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138a9190613e10565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602054600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461143c9190613f1c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602054604051611500919061363b565b60405180910390a3602054601f546115189190613e10565b601f819055506000602081905550565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611569612272565b73ffffffffffffffffffffffffffffffffffffffff161461158957600080fd5b6000611594306115cb565b905060008111156115a9576115a881613018565b5b600047905060008111156115c1576115c0816132b0565b5b5050565b601d5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161c612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606040518060400160405280600581526020017f444f4a414b000000000000000000000000000000000000000000000000000000815250905090565b60006117ed6117e6612272565b8484612443565b6001905092915050565b601b5481565b600b5481565b61180b612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90613c3e565b60405180910390fd5b81601281905550806013819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6008600a6118d59190613b65565b653f231a70b8006118e69190613bb0565b6040516118f3919061363b565b60405180910390a15050565b611907612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90613c3e565b60405180910390fd5b81600681905550806007819055505050565b602a6020528060005260406000206000915054906101000a900460ff1681565b6119ce612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613c3e565b60405180910390fd5b60005b8151811015611aec57600160046000848481518110611a8057611a7f613c5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ae490613c8d565b915050611a5e565b5050565b600f54601f5410611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613efc565b60405180910390fd5b611b5860285443611b479190613f1c565b60295461331c90919063ffffffff16565b602054611b659190613e10565b602081905550600f54602054601f54611b7e9190613e10565b1115611b9b57601f54600f54611b949190613f1c565b6020819055505b43602881905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c33612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613c3e565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d28573d6000803e3d6000fd5b50565b60075481565b611d39612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613c3e565b60405180910390fd5b601760149054906101000a900460ff1615611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90613f9c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008600a611ea09190613b65565b653f231a70b800611eb19190613bb0565b61227a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f479190613fd1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff49190613fd1565b6040518363ffffffff1660e01b8152600401612011929190613ffe565b6020604051808303816000875af1158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190613fd1565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306011546000806120e261176d565b426040518863ffffffff1660e01b81526004016121049695949392919061406c565b60606040518083038185885af1158015612122573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061214791906140e2565b505050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121e9929190614135565b6020604051808303816000875af1158015612208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222c919061418a565b506001601760166101000a81548160ff0219169083151502179055506001601760146101000a81548160ff02191690831515021790555043602781905550565b601c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090614229565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f906142bb565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612436919061363b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99061434d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612518906143df565b60405180910390fd5b60008111612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90614471565b60405180910390fd5b8061256e846115cb565b10156125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a6906144dd565b60405180910390fd5b60006002602754436125c19190613f1c565b1015612620576001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61262861176d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612696575061266661176d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b6057600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561273f5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61274857600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156127f35750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128495750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561290457601254821115612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90614549565b60405180910390fd5b601354826128a0856115cb565b6128aa9190613e10565b11156128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e2906145b5565b60405180910390fd5b600d60008154809291906128fe90613c8d565b91905055505b6129406064612932600a54600d541161291f57600654612923565b6008545b8561331c90919063ffffffff16565b61339690919063ffffffff16565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156129cb57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a0f57612a0c60646129fe600b54600d54116129eb576007546129ef565b6009545b8561331c90919063ffffffff16565b61339690919063ffffffff16565b90505b6000612a1a306115cb565b9050601760159054906101000a900460ff16158015612a865750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612a9e5750601760169054906101000a900460ff165b8015612adf5750601454601f54600f54601e54600e5485612abf9190613f1c565b612ac99190613e10565b612ad39190613f1c565b612add9190613e10565b115b8015612aee5750600c54600d54115b15612b5e57612b44612b3f84612b3a601f54602054601e54600e5488612b149190613f1c565b612b1e9190613e10565b612b289190613f1c565b612b329190613e10565b6015546133e0565b6133e0565b613018565b60004790506000811115612b5c57612b5b476132b0565b5b505b505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b9857600090505b6000811115612c9c57612bf381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c93919061363b565b60405180910390a35b612cee82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d95612d478284612f7090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612e3a8486612f7090919063ffffffff16565b604051612e47919061363b565b60405180910390a350505050565b6000838311158290612e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9491906134ec565b60405180910390fd5b5060008385612eac9190613f1c565b9050809150509392505050565b60008082905060005b8551811015612f62576000868281518110612ee057612edf613c5e565b5b6020026020010151905080831015612f22578281604051602001612f05929190614600565b604051602081830303815290604052805190602001209250612f4e565b8083604051602001612f35929190614600565b6040516020818303038152906040528051906020012092505b508080612f5a90613c8d565b915050612ec2565b508381149150509392505050565b6000612fb283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e55565b905092915050565b6000808284612fc99190613e10565b90508381101561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300590614678565b60405180910390fd5b8091505092915050565b6001601760156101000a81548160ff021916908315150217905550600081031561329257601760149054906101000a900460ff1615613292576000600267ffffffffffffffff81111561306e5761306d6136e5565b5b60405190808252806020026020018201604052801561309c5781602001602082028036833780820191505090505b50905030816000815181106130b4576130b3613c5e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190613fd1565b8160018151811061319357613192613c5e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131fa30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161325e959493929190614756565b600060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b50505050505b6000601760156101000a81548160ff02191690831515021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613318573d6000803e3d6000fd5b5050565b600080830361332e5760009050613390565b6000828461333c9190613bb0565b905082848261334b91906147df565b1461338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338290614882565b60405180910390fd5b809150505b92915050565b60006133d883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133f9565b905092915050565b60008183116133ef57826133f1565b815b905092915050565b60008083118290613440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343791906134ec565b60405180910390fd5b506000838561344f91906147df565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349657808201518184015260208101905061347b565b60008484015250505050565b6000601f19601f8301169050919050565b60006134be8261345c565b6134c88185613467565b93506134d8818560208601613478565b6134e1816134a2565b840191505092915050565b6000602082019050818103600083015261350681846134b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354d82613522565b9050919050565b61355d81613542565b811461356857600080fd5b50565b60008135905061357a81613554565b92915050565b6000819050919050565b61359381613580565b811461359e57600080fd5b50565b6000813590506135b08161358a565b92915050565b600080604083850312156135cd576135cc613518565b5b60006135db8582860161356b565b92505060206135ec858286016135a1565b9150509250929050565b60008115159050919050565b61360b816135f6565b82525050565b60006020820190506136266000830184613602565b92915050565b61363581613580565b82525050565b6000602082019050613650600083018461362c565b92915050565b60008060006060848603121561366f5761366e613518565b5b600061367d8682870161356b565b935050602061368e8682870161356b565b925050604061369f868287016135a1565b9150509250925092565b600060ff82169050919050565b6136bf816136a9565b82525050565b60006020820190506136da60008301846136b6565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61371d826134a2565b810181811067ffffffffffffffff8211171561373c5761373b6136e5565b5b80604052505050565b600061374f61350e565b905061375b8282613714565b919050565b600067ffffffffffffffff82111561377b5761377a6136e5565b5b602082029050602081019050919050565b600080fd5b60006137a461379f84613760565b613745565b905080838252602082019050602084028301858111156137c7576137c661378c565b5b835b818110156137f057806137dc888261356b565b8452602084019350506020810190506137c9565b5050509392505050565b600082601f83011261380f5761380e6136e0565b5b813561381f848260208601613791565b91505092915050565b60006020828403121561383e5761383d613518565b5b600082013567ffffffffffffffff81111561385c5761385b61351d565b5b613868848285016137fa565b91505092915050565b600080fd5b60008083601f84011261388c5761388b6136e0565b5b8235905067ffffffffffffffff8111156138a9576138a8613871565b5b6020830191508360208202830111156138c5576138c461378c565b5b9250929050565b6000806000604084860312156138e5576138e4613518565b5b600084013567ffffffffffffffff8111156139035761390261351d565b5b61390f86828701613876565b93509350506020613922868287016135a1565b9150509250925092565b60006020828403121561394257613941613518565b5b60006139508482850161356b565b91505092915050565b61396281613542565b82525050565b600060208201905061397d6000830184613959565b92915050565b6000806040838503121561399a57613999613518565b5b60006139a8858286016135a1565b92505060206139b9858286016135a1565b9150509250929050565b600080604083850312156139da576139d9613518565b5b60006139e88582860161356b565b92505060206139f98582860161356b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a8957808604811115613a6557613a64613a03565b5b6001851615613a745780820291505b8081029050613a8285613a32565b9450613a49565b94509492505050565b600082613aa25760019050613b5e565b81613ab05760009050613b5e565b8160018114613ac65760028114613ad057613aff565b6001915050613b5e565b60ff841115613ae257613ae1613a03565b5b8360020a915084821115613af957613af8613a03565b5b50613b5e565b5060208310610133831016604e8410600b8410161715613b345782820a905083811115613b2f57613b2e613a03565b5b613b5e565b613b418484846001613a3f565b92509050818404811115613b5857613b57613a03565b5b81810290505b9392505050565b6000613b7082613580565b9150613b7b836136a9565b9250613ba87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a92565b905092915050565b6000613bbb82613580565b9150613bc683613580565b9250828202613bd481613580565b91508282048414831517613beb57613bea613a03565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c28602083613467565b9150613c3382613bf2565b602082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613c9882613580565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cca57613cc9613a03565b5b600182019050919050565b7f416464726573732068617320616c726561647920636c61696d65642e00000000600082015250565b6000613d0b601c83613467565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b60008160601b9050919050565b6000613d5982613d41565b9050919050565b6000613d6b82613d4e565b9050919050565b613d83613d7e82613542565b613d60565b82525050565b6000613d958284613d72565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613dda600d83613467565b9150613de582613da4565b602082019050919050565b60006020820190508181036000830152613e0981613dcd565b9050919050565b6000613e1b82613580565b9150613e2683613580565b9250828201905080821115613e3e57613e3d613a03565b5b92915050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e7a600f83613467565b9150613e8582613e44565b602082019050919050565b60006020820190508181036000830152613ea981613e6d565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b6000613ee6601083613467565b9150613ef182613eb0565b602082019050919050565b60006020820190508181036000830152613f1581613ed9565b9050919050565b6000613f2782613580565b9150613f3283613580565b9250828203905081811115613f4a57613f49613a03565b5b92915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613f86601783613467565b9150613f9182613f50565b602082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b600081519050613fcb81613554565b92915050565b600060208284031215613fe757613fe6613518565b5b6000613ff584828501613fbc565b91505092915050565b60006040820190506140136000830185613959565b6140206020830184613959565b9392505050565b6000819050919050565b6000819050919050565b600061405661405161404c84614027565b614031565b613580565b9050919050565b6140668161403b565b82525050565b600060c0820190506140816000830189613959565b61408e602083018861362c565b61409b604083018761405d565b6140a8606083018661405d565b6140b56080830185613959565b6140c260a083018461362c565b979650505050505050565b6000815190506140dc8161358a565b92915050565b6000806000606084860312156140fb576140fa613518565b5b6000614109868287016140cd565b935050602061411a868287016140cd565b925050604061412b868287016140cd565b9150509250925092565b600060408201905061414a6000830185613959565b614157602083018461362c565b9392505050565b614167816135f6565b811461417257600080fd5b50565b6000815190506141848161415e565b92915050565b6000602082840312156141a05761419f613518565b5b60006141ae84828501614175565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614213602483613467565b915061421e826141b7565b604082019050919050565b6000602082019050818103600083015261424281614206565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142a5602283613467565b91506142b082614249565b604082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614337602583613467565b9150614342826142db565b604082019050919050565b600060208201905081810360008301526143668161432a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006143c9602383613467565b91506143d48261436d565b604082019050919050565b600060208201905081810360008301526143f8816143bc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061445b602983613467565b9150614466826143ff565b604082019050919050565b6000602082019050818103600083015261448a8161444e565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006144c7601183613467565b91506144d282614491565b602082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000614533601983613467565b915061453e826144fd565b602082019050919050565b6000602082019050818103600083015261456281614526565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b600061459f601a83613467565b91506145aa82614569565b602082019050919050565b600060208201905081810360008301526145ce81614592565b9050919050565b6000819050919050565b6000819050919050565b6145fa6145f5826145d5565b6145df565b82525050565b600061460c82856145e9565b60208201915061461c82846145e9565b6020820191508190509392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614662601b83613467565b915061466d8261462c565b602082019050919050565b6000602082019050818103600083015261469181614655565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146cd81613542565b82525050565b60006146df83836146c4565b60208301905092915050565b6000602082019050919050565b600061470382614698565b61470d81856146a3565b9350614718836146b4565b8060005b8381101561474957815161473088826146d3565b975061473b836146eb565b92505060018101905061471c565b5085935050505092915050565b600060a08201905061476b600083018861362c565b614778602083018761405d565b818103604083015261478a81866146f8565b90506147996060830185613959565b6147a6608083018461362c565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147ea82613580565b91506147f583613580565b925082614805576148046147b0565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061486c602183613467565b915061487782614810565b604082019050919050565b6000602082019050818103600083015261489b8161485f565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122047f1d1288822aac695b8d97a9353a7cab90e6ed8701ec9e44f1b85666871a22d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80638da5cb5b11610102578063d1b6dd3011610095578063e086e5ec11610064578063e086e5ec146106cb578063e1b19258146106e2578063e2f60aef1461070d578063fb3501a114610724576101ee565b8063d1b6dd3014610611578063d34628cc1461064e578063d5c5ec5814610677578063dd62ed3e1461068e576101ee565b8063aa2d8b20116100d1578063aa2d8b2014610569578063c36956a014610594578063c4590d3f146105bf578063c647b20e146105e8576101ee565b80638da5cb5b146104ab5780638f9a55c0146104d657806395d89b4114610501578063a9059cbb1461052c576101ee565b80633b7cdccd1161017a5780635b6877e4116101495780635b6877e41461040157806370a082311461042c578063715018a6146104695780637d1db4a514610480576101ee565b80633b7cdccd1461036b5780633bbac579146103965780634c5b2de2146103d357806351bc3c85146103ea576101ee565b806323b872dd116101b657806323b872dd146102b1578063313ce567146102ee57806331c2d847146103195780633335252b14610342576101ee565b806306fdde03146101f3578063095ea7b31461021e5780630c1930451461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061020861074f565b60405161021591906134ec565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906135b6565b61078c565b6040516102529190613611565b60405180910390f35b34801561026757600080fd5b506102706107aa565b60405161027d919061363b565b60405180910390f35b34801561029257600080fd5b5061029b6107b0565b6040516102a8919061363b565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613656565b6107d6565b6040516102e59190613611565b60405180910390f35b3480156102fa57600080fd5b506103036108af565b60405161031091906136c5565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613828565b6108b8565b005b34801561034e57600080fd5b50610369600480360381019061036491906138cc565b6109e2565b005b34801561037757600080fd5b506103806111ea565b60405161038d919061363b565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061392c565b6111f0565b6040516103ca9190613611565b60405180910390f35b3480156103df57600080fd5b506103e8611246565b005b3480156103f657600080fd5b506103ff611528565b005b34801561040d57600080fd5b506104166115c5565b604051610423919061363b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061392c565b6115cb565b604051610460919061363b565b60405180910390f35b34801561047557600080fd5b5061047e611614565b005b34801561048c57600080fd5b50610495611767565b6040516104a2919061363b565b60405180910390f35b3480156104b757600080fd5b506104c061176d565b6040516104cd9190613968565b60405180910390f35b3480156104e257600080fd5b506104eb611796565b6040516104f8919061363b565b60405180910390f35b34801561050d57600080fd5b5061051661179c565b60405161052391906134ec565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e91906135b6565b6117d9565b6040516105609190613611565b60405180910390f35b34801561057557600080fd5b5061057e6117f7565b60405161058b919061363b565b60405180910390f35b3480156105a057600080fd5b506105a96117fd565b6040516105b6919061363b565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613983565b611803565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613983565b6118ff565b005b34801561061d57600080fd5b506106386004803603810190610633919061392c565b6119a6565b6040516106459190613611565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613828565b6119c6565b005b34801561068357600080fd5b5061068c611af0565b005b34801561069a57600080fd5b506106b560048036038101906106b091906139c3565b611ba4565b6040516106c2919061363b565b60405180910390f35b3480156106d757600080fd5b506106e0611c2b565b005b3480156106ee57600080fd5b506106f7611d2b565b604051610704919061363b565b60405180910390f35b34801561071957600080fd5b50610722611d31565b005b34801561073057600080fd5b5061073961226c565b604051610746919061363b565b60405180910390f35b60606040518060400160405280600781526020017f446f776e62616400000000000000000000000000000000000000000000000000815250905090565b60006107a0610799612272565b848461227a565b6001905092915050565b600a5481565b60006008600a6107c09190613b65565b653f231a70b8006107d19190613bb0565b905090565b60006107e3848484612443565b6108a4846107ef612272565b61089f856040518060600160405280602881526020016148a360289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610855612272565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e559092919063ffffffff16565b61227a565b600190509392505050565b60006008905090565b6108c0612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490613c3e565b60405180910390fd5b60005b81518110156109de5760006004600084848151811061097257610971613c5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109d690613c8d565b915050610950565b5050565b602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690613d21565b60405180910390fd5b600033604051602001610a829190613d89565b60405160208183030381529060405280519060200120905060018203610b3457610af0848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060185483612eb9565b610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690613df0565b60405180910390fd5b610c66565b60028203610bce57610b8a848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060195483612eb9565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613df0565b60405180910390fd5b610c65565b60038203610c6457610c24848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601a5483612eb9565b610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613df0565b60405180910390fd5b5b5b5b6001602a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060018203610e7657610d1a601b54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db1601b54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601b54601e54610e049190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b54604051610e69919061363b565b60405180910390a36111e4565b6002820361102e57610ed2601c54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f69601c54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601c54601e54610fbc9190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c54604051611021919061363b565b60405180910390a36111e3565b600382036111e25761108a601d54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611121601d54600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d54601e546111749190613e10565b601e819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d546040516111d9919061363b565b60405180910390a35b5b5b50505050565b60065481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613e90565b60405180910390fd5b60006020541161131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613efc565b60405180910390fd5b60205460016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138a9190613e10565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602054600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461143c9190613f1c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602054604051611500919061363b565b60405180910390a3602054601f546115189190613e10565b601f819055506000602081905550565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611569612272565b73ffffffffffffffffffffffffffffffffffffffff161461158957600080fd5b6000611594306115cb565b905060008111156115a9576115a881613018565b5b600047905060008111156115c1576115c0816132b0565b5b5050565b601d5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161c612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b60606040518060400160405280600581526020017f444f4a414b000000000000000000000000000000000000000000000000000000815250905090565b60006117ed6117e6612272565b8484612443565b6001905092915050565b601b5481565b600b5481565b61180b612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90613c3e565b60405180910390fd5b81601281905550806013819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6008600a6118d59190613b65565b653f231a70b8006118e69190613bb0565b6040516118f3919061363b565b60405180910390a15050565b611907612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b90613c3e565b60405180910390fd5b81600681905550806007819055505050565b602a6020528060005260406000206000915054906101000a900460ff1681565b6119ce612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613c3e565b60405180910390fd5b60005b8151811015611aec57600160046000848481518110611a8057611a7f613c5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ae490613c8d565b915050611a5e565b5050565b600f54601f5410611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613efc565b60405180910390fd5b611b5860285443611b479190613f1c565b60295461331c90919063ffffffff16565b602054611b659190613e10565b602081905550600f54602054601f54611b7e9190613e10565b1115611b9b57601f54600f54611b949190613f1c565b6020819055505b43602881905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c33612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613c3e565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d28573d6000803e3d6000fd5b50565b60075481565b611d39612272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613c3e565b60405180910390fd5b601760149054906101000a900460ff1615611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90613f9c565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008600a611ea09190613b65565b653f231a70b800611eb19190613bb0565b61227a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f479190613fd1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff49190613fd1565b6040518363ffffffff1660e01b8152600401612011929190613ffe565b6020604051808303816000875af1158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190613fd1565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306011546000806120e261176d565b426040518863ffffffff1660e01b81526004016121049695949392919061406c565b60606040518083038185885af1158015612122573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061214791906140e2565b505050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121e9929190614135565b6020604051808303816000875af1158015612208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222c919061418a565b506001601760166101000a81548160ff0219169083151502179055506001601760146101000a81548160ff02191690831515021790555043602781905550565b601c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090614229565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f906142bb565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612436919061363b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99061434d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612518906143df565b60405180910390fd5b60008111612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90614471565b60405180910390fd5b8061256e846115cb565b10156125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a6906144dd565b60405180910390fd5b60006002602754436125c19190613f1c565b1015612620576001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61262861176d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612696575061266661176d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612b6057600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561273f5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61274857600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156127f35750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128495750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561290457601254821115612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90614549565b60405180910390fd5b601354826128a0856115cb565b6128aa9190613e10565b11156128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e2906145b5565b60405180910390fd5b600d60008154809291906128fe90613c8d565b91905055505b6129406064612932600a54600d541161291f57600654612923565b6008545b8561331c90919063ffffffff16565b61339690919063ffffffff16565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156129cb57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a0f57612a0c60646129fe600b54600d54116129eb576007546129ef565b6009545b8561331c90919063ffffffff16565b61339690919063ffffffff16565b90505b6000612a1a306115cb565b9050601760159054906101000a900460ff16158015612a865750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612a9e5750601760169054906101000a900460ff165b8015612adf5750601454601f54600f54601e54600e5485612abf9190613f1c565b612ac99190613e10565b612ad39190613f1c565b612add9190613e10565b115b8015612aee5750600c54600d54115b15612b5e57612b44612b3f84612b3a601f54602054601e54600e5488612b149190613f1c565b612b1e9190613e10565b612b289190613f1c565b612b329190613e10565b6015546133e0565b6133e0565b613018565b60004790506000811115612b5c57612b5b476132b0565b5b505b505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b9857600090505b6000811115612c9c57612bf381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c93919061363b565b60405180910390a35b612cee82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d95612d478284612f7090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612e3a8486612f7090919063ffffffff16565b604051612e47919061363b565b60405180910390a350505050565b6000838311158290612e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9491906134ec565b60405180910390fd5b5060008385612eac9190613f1c565b9050809150509392505050565b60008082905060005b8551811015612f62576000868281518110612ee057612edf613c5e565b5b6020026020010151905080831015612f22578281604051602001612f05929190614600565b604051602081830303815290604052805190602001209250612f4e565b8083604051602001612f35929190614600565b6040516020818303038152906040528051906020012092505b508080612f5a90613c8d565b915050612ec2565b508381149150509392505050565b6000612fb283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e55565b905092915050565b6000808284612fc99190613e10565b90508381101561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300590614678565b60405180910390fd5b8091505092915050565b6001601760156101000a81548160ff021916908315150217905550600081031561329257601760149054906101000a900460ff1615613292576000600267ffffffffffffffff81111561306e5761306d6136e5565b5b60405190808252806020026020018201604052801561309c5781602001602082028036833780820191505090505b50905030816000815181106130b4576130b3613c5e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190613fd1565b8160018151811061319357613192613c5e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131fa30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161325e959493929190614756565b600060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b50505050505b6000601760156101000a81548160ff02191690831515021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613318573d6000803e3d6000fd5b5050565b600080830361332e5760009050613390565b6000828461333c9190613bb0565b905082848261334b91906147df565b1461338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338290614882565b60405180910390fd5b809150505b92915050565b60006133d883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133f9565b905092915050565b60008183116133ef57826133f1565b815b905092915050565b60008083118290613440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343791906134ec565b60405180910390fd5b506000838561344f91906147df565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349657808201518184015260208101905061347b565b60008484015250505050565b6000601f19601f8301169050919050565b60006134be8261345c565b6134c88185613467565b93506134d8818560208601613478565b6134e1816134a2565b840191505092915050565b6000602082019050818103600083015261350681846134b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354d82613522565b9050919050565b61355d81613542565b811461356857600080fd5b50565b60008135905061357a81613554565b92915050565b6000819050919050565b61359381613580565b811461359e57600080fd5b50565b6000813590506135b08161358a565b92915050565b600080604083850312156135cd576135cc613518565b5b60006135db8582860161356b565b92505060206135ec858286016135a1565b9150509250929050565b60008115159050919050565b61360b816135f6565b82525050565b60006020820190506136266000830184613602565b92915050565b61363581613580565b82525050565b6000602082019050613650600083018461362c565b92915050565b60008060006060848603121561366f5761366e613518565b5b600061367d8682870161356b565b935050602061368e8682870161356b565b925050604061369f868287016135a1565b9150509250925092565b600060ff82169050919050565b6136bf816136a9565b82525050565b60006020820190506136da60008301846136b6565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61371d826134a2565b810181811067ffffffffffffffff8211171561373c5761373b6136e5565b5b80604052505050565b600061374f61350e565b905061375b8282613714565b919050565b600067ffffffffffffffff82111561377b5761377a6136e5565b5b602082029050602081019050919050565b600080fd5b60006137a461379f84613760565b613745565b905080838252602082019050602084028301858111156137c7576137c661378c565b5b835b818110156137f057806137dc888261356b565b8452602084019350506020810190506137c9565b5050509392505050565b600082601f83011261380f5761380e6136e0565b5b813561381f848260208601613791565b91505092915050565b60006020828403121561383e5761383d613518565b5b600082013567ffffffffffffffff81111561385c5761385b61351d565b5b613868848285016137fa565b91505092915050565b600080fd5b60008083601f84011261388c5761388b6136e0565b5b8235905067ffffffffffffffff8111156138a9576138a8613871565b5b6020830191508360208202830111156138c5576138c461378c565b5b9250929050565b6000806000604084860312156138e5576138e4613518565b5b600084013567ffffffffffffffff8111156139035761390261351d565b5b61390f86828701613876565b93509350506020613922868287016135a1565b9150509250925092565b60006020828403121561394257613941613518565b5b60006139508482850161356b565b91505092915050565b61396281613542565b82525050565b600060208201905061397d6000830184613959565b92915050565b6000806040838503121561399a57613999613518565b5b60006139a8858286016135a1565b92505060206139b9858286016135a1565b9150509250929050565b600080604083850312156139da576139d9613518565b5b60006139e88582860161356b565b92505060206139f98582860161356b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a8957808604811115613a6557613a64613a03565b5b6001851615613a745780820291505b8081029050613a8285613a32565b9450613a49565b94509492505050565b600082613aa25760019050613b5e565b81613ab05760009050613b5e565b8160018114613ac65760028114613ad057613aff565b6001915050613b5e565b60ff841115613ae257613ae1613a03565b5b8360020a915084821115613af957613af8613a03565b5b50613b5e565b5060208310610133831016604e8410600b8410161715613b345782820a905083811115613b2f57613b2e613a03565b5b613b5e565b613b418484846001613a3f565b92509050818404811115613b5857613b57613a03565b5b81810290505b9392505050565b6000613b7082613580565b9150613b7b836136a9565b9250613ba87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a92565b905092915050565b6000613bbb82613580565b9150613bc683613580565b9250828202613bd481613580565b91508282048414831517613beb57613bea613a03565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c28602083613467565b9150613c3382613bf2565b602082019050919050565b60006020820190508181036000830152613c5781613c1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613c9882613580565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cca57613cc9613a03565b5b600182019050919050565b7f416464726573732068617320616c726561647920636c61696d65642e00000000600082015250565b6000613d0b601c83613467565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b60008160601b9050919050565b6000613d5982613d41565b9050919050565b6000613d6b82613d4e565b9050919050565b613d83613d7e82613542565b613d60565b82525050565b6000613d958284613d72565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613dda600d83613467565b9150613de582613da4565b602082019050919050565b60006020820190508181036000830152613e0981613dcd565b9050919050565b6000613e1b82613580565b9150613e2683613580565b9250828201905080821115613e3e57613e3d613a03565b5b92915050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e7a600f83613467565b9150613e8582613e44565b602082019050919050565b60006020820190508181036000830152613ea981613e6d565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b6000613ee6601083613467565b9150613ef182613eb0565b602082019050919050565b60006020820190508181036000830152613f1581613ed9565b9050919050565b6000613f2782613580565b9150613f3283613580565b9250828203905081811115613f4a57613f49613a03565b5b92915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613f86601783613467565b9150613f9182613f50565b602082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b600081519050613fcb81613554565b92915050565b600060208284031215613fe757613fe6613518565b5b6000613ff584828501613fbc565b91505092915050565b60006040820190506140136000830185613959565b6140206020830184613959565b9392505050565b6000819050919050565b6000819050919050565b600061405661405161404c84614027565b614031565b613580565b9050919050565b6140668161403b565b82525050565b600060c0820190506140816000830189613959565b61408e602083018861362c565b61409b604083018761405d565b6140a8606083018661405d565b6140b56080830185613959565b6140c260a083018461362c565b979650505050505050565b6000815190506140dc8161358a565b92915050565b6000806000606084860312156140fb576140fa613518565b5b6000614109868287016140cd565b935050602061411a868287016140cd565b925050604061412b868287016140cd565b9150509250925092565b600060408201905061414a6000830185613959565b614157602083018461362c565b9392505050565b614167816135f6565b811461417257600080fd5b50565b6000815190506141848161415e565b92915050565b6000602082840312156141a05761419f613518565b5b60006141ae84828501614175565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614213602483613467565b915061421e826141b7565b604082019050919050565b6000602082019050818103600083015261424281614206565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142a5602283613467565b91506142b082614249565b604082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614337602583613467565b9150614342826142db565b604082019050919050565b600060208201905081810360008301526143668161432a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006143c9602383613467565b91506143d48261436d565b604082019050919050565b600060208201905081810360008301526143f8816143bc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061445b602983613467565b9150614466826143ff565b604082019050919050565b6000602082019050818103600083015261448a8161444e565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006144c7601183613467565b91506144d282614491565b602082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000614533601983613467565b915061453e826144fd565b602082019050919050565b6000602082019050818103600083015261456281614526565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b600061459f601a83613467565b91506145aa82614569565b602082019050919050565b600060208201905081810360008301526145ce81614592565b9050919050565b6000819050919050565b6000819050919050565b6145fa6145f5826145d5565b6145df565b82525050565b600061460c82856145e9565b60208201915061461c82846145e9565b6020820191508190509392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614662601b83613467565b915061466d8261462c565b602082019050919050565b6000602082019050818103600083015261469181614655565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146cd81613542565b82525050565b60006146df83836146c4565b60208301905092915050565b6000602082019050919050565b600061470382614698565b61470d81856146a3565b9350614718836146b4565b8060005b8381101561474957815161473088826146d3565b975061473b836146eb565b92505060018101905061471c565b5085935050505092915050565b600060a08201905061476b600083018861362c565b614778602083018761405d565b818103604083015261478a81866146f8565b90506147996060830185613959565b6147a6608083018461362c565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147ea82613580565b91506147f583613580565b925082614805576148046147b0565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061486c602183613467565b915061487782614810565b604082019050919050565b6000602082019050818103600083015261489b8161485f565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122047f1d1288822aac695b8d97a9353a7cab90e6ed8701ec9e44f1b85666871a22d64736f6c63430008130033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.