title: "Merkle Mountain Range for Immediately Verifiable and Replicable Commitments" abbrev: MMRIVER cat: exp docname: draft-bryce-cose-merkle-mountain-range-proofs-latest submissiontype: IETF number: date: consensus: true v: 3 area: "Security" workgroup: "CBOR Object Signing and Encryption" keyword:
- Internet-Draft
mail: [email protected]
arch: https://example.com/WG
latest: https://example.com/LATEST
fullname: Robin Bryce
organization: DataTrails
# we can't change email once an I-D is accepted, and we have changed company emails twice now.
# also, this is the email that I contribute using on github.
email: [email protected]
normative:
informative:
--- abstract
Editors note: This was the original cut. Going to move all of the pedagogy to seperate content.
This specification describes a protocol for the COSE encoding of verifiable commitments to data, providing immediate verifiability and immediate, safe, replicability of these commitments. Using this scheme, any replicated copy of the data, or a sub range thereof, is permanently verifiable and is permanently consistent with the complete data set. The specification allows for historic commitments and the original data, if desired, to be pruned without impacting the verifiability of subsequent data or any replicated copies. Verifiers and auditors may be off line indefinitely, and yet, once back online, be guaranteed they can prove integrity and consistency, or otherwise, against any future state they encounter.
--- middle
The term "Merkle Mountain Range" is due to PeterTodd and has wide acceptance as the identifier for the approach to managing Merkle trees described by this specification. This is typically abbreviated as MMR.
An MMR is the unique series of perfect binary merkle trees required to commit its leaves. The nodes, including the leaves are stored linearly.
6
2 5
0 1 3 4 7
This illustrates MMR(8)
, which is comprised of two perfect trees.
The first is rooted at 6, and the second is the single leaf element 7.
As leaves are added to an MMR, additional nodes are appended to "merge" with the
preceding tree if the height of the new node matches the height of that tree.
This process repeats as the interior nodes are added until all trees are complete and are of different heights.
Nodes in an MMR are organized linearly in storage, and are strictly write once and append only. The MMR can also be seen as the node visitation order obtained by the post-order traversal of a series of complete binary trees. This specification defines how to create, verify and encode proofs of inclusion and consistency for MMR's in CBOR.
Proving and verifying is defined in terms of the cryptographic, asynchronous, accumulator described by ReyzinYakoubov
Algorithms for leaf addition and for proving and verifying inclusion and consistency are defined. Additionally a small number of primitive operations commonly useful in the context of MMR's are provided. The format of the underlying storage is outside the scope of this document, however some minimal requirements are established for interfacing with it.
There are distinct advantages for maintainers of verifiable data and for parties relying on the verifiability of that data when using this approach:
- Updates to the persistent MMR data can be co-ordination free. Competing writers can safely use Optimistic Concurrency Control
- MMR data does not change once written. This makes additions immediately available for replication and caching with mechanisms such as HTTP_ETag
- Proofs of inclusion for a specific element are permanently consistent with all future states of the MMR. And, an MMR state which fails this property is provably inconsistent.
- A proof of inclusion can be verified against any historic accumulator, provided the element being verified was included in the MMR at the time the accumulator was obtained.
- Proof of consistency can be defined as the proof of inclusion for each old accumulator entry, and so inherit all the properties of the inclusion proofs.
- For a previously saved inclusion proof, there are at most log 2 (n) future accumulator states required to show its validity against any future MMR. Where n is the count of additions made after the entry was added.
- MMR's can be pruned without breaking these properties of inclusion and consistency.
- The accumulator states naturally emerge from the MMR and are also permanently consistent with future states of the MMR.
The above advantages mostly follow from:
- A post order traversal of a binary tree results in a naturally linear storage organization. As observed in CrosbySecondaryStorage.
- An asynchronous cryptographic accumulator naturally emerges when maintaining an MMR in this way. ReyzinYakoubov defines the properties of these, which are particularly relevant here, as "Low update frequency" and "Old-Accumulator Compatibility".
- As the post order traversal index is permanently identifying for any elements siblings and parents, the verification path element indices is known and permanent. It can be easily computed without needing to materialize the MMR in whole or in part.
Further work in BNT defines additional advantages for contexts in which "stream" processing of verifiable data is desirable. Post-order, Pre-order and in-order tree traversal are defined by KnuthTBT
{::boilerplate bcp14-tagged}
i
shall be the index of any node, including leaf nodes, in the MMRpos
shall bei+1
and is important only in the implementation of some algorithms.e
shall be the zero based index of leaf entry in the MMR (where only leaves are considered, and interiors are excluded)f
shall be a leaf value, which isH(x)
h
shall be the 1 based tree heightg
shall be the 0 based tree height,h-1
v
shall be any node, including a leaf node value, which will be the result ofH(x)
.S
shall be any valid MMR size, and is uniquely identifying for an MMR stateC
shall be the last node index of any complete MMR.A
shall be the the accumulator for any complete MMRC
R
shall be the the sparse accumulator, of ReyzinYakoubov, for any complete MMRC
H(x)
shall be the SHA-256 digest of any value x||
shall mean concatenation of raw byte representations of the referenced values.D
shall mean the linear array storing all node in the MMR.
In this specification, all numbers are unsigned 64 bit integers. The maximum height of a single tree is 64 (which will have g=63
for its peak).
Were an MMR to accept a new addition once every 10 milliseconds, it would take roughly 4.6 million millennia to over flow.
Should a system exist that can extend an MMR fast enough for this to be a limitation, the same advantages that make MMR's convenient to work with also accrue to combinations of MMR's.
In this section we introduce the asynchronous cryptographic accumulator naturally available in an MMR, and which is crucial to to a number of the benefits of this approach.
The set of peaks for an MMR of any size is a naturally forming cryptographic accumulator. This uniquely and succinctly commits the complete history of the MMR. For its formal definition see ReyzinYakoubov
As discussed above, an MMR is a series of binary trees maintained logically in descending order of height. Given only the preceding peaks, and the leaf nodes of the last tree, it is always possible to complete the last tree. By fully exploiting this property in the organization of persistent storage, new entries can be appended without co-ordination between competing writers.
An algorithm to add a single leaf to an MMR is given in add_leaf_hash
The notable distinction from more traditional "mono" roots approach to merkle tree proofs is that, as the MMR grows,
elements in the accumulator change with low frequency, while a mono root is unique for each individual addition.
This frequency is defined as
It is important to note that while the accumulator state evolves, all nodes in the MMR are write once. The accumulator simply comprises the nodes at the peaks for the current MMR state. All paths for proofs of inclusion lead to an accumulator peak, rather than a single "mono" root.
This means many proofs of inclusion are committed by a single entry in an accumulator state, and so share the same root.
The inclusion path for any element is strictly append only, in addition to the data structure itself being append only. Consistency proofs are the inclusion proofs for the old-accumulator peaks against the accumulator for the future MMR state consistency is being shown for. An accumulator is at most MMR height long, which is also the maximum length of any single proof of inclusion + 1.
For illustration, consider MMR(8)
which is a complete MMR with two peaks at node indices 6 and 7.
6
2 5
0 1 3 4 7
The node indices match their location in storage.
MMR's are identified uniquely by their size. Above we have MMR(8)
, because there are 8 nodes.
An incomplete MMR may still be identified. Here we have MMR(9)
.
6
2 5
0 1 3 4 7 8
However, its accumulator is that of the most recent complete MMR.
An MMR is said to be complete when all peaks have a distinct height.
The value for node 9 is H(7 || 8)
,
and adding 8 merges the two, single element, binary trees represented by 7 and 8..
6
2 5 9
0 1 3 4 7 8
The accumulator, described by ReyzinYakoubov is the set of peaks, with gaps reserved for the missing peaks. MMR(8), where a gap is indicated by _ would be:
[6, _, 7]
The packed form would be:
[6, 7]
The accumulator for MMR(10)
is:
[6, 9, _]
The accumulator, packed or padded, lists the peaks strictly descending order of height. Given this fact, straight forward primitives for selecting the desired peak can be derived from both packed and un-packed form. The algorithms in this document work with the packed form exclusively.
Given any index i
in the MMR, the accumulator for the previous D[0:i)
nodes
satisfies the sibling dependencies of the inclusion paths of all subsequent D[i:n]
nodes.
And the accumulator is itself only dependent, for proof of inclusion or consistency, on nodes in D[i:n]
This feature of MMR's allows for historic, no longer interesting, log data to be cleanly purged without impacting the verifiability of the retained log.
It also lends itself to replicability. The linear, self contained, nature of the organization makes replication of verifiable sub sections of the log extremely convenient.
The progression of the packed accumulator for MMR sizes 1, 3, 4, 7, 8 is then:
MMR(1): [0]
MMR(3): [2]
MMR(4): [2, 3]
MMR(7): [6]
MMR(8): [6, 7]
MMR(10): [6, 9]
The verification path for node 1
in MMR(3)
is [0]
, because H(0, 1)
is the value at 2
.
The path for node 1
in MMR(4)
remains un changed.
The path for node 1
in MMR(7)
becomes [0, 5]
, because H(0, 1)
is the value at 2
, and H(H(0, 1), 5)
is the value at 6
.
The path for node 1
in MMR(8)
and MMR(10)
remains unchanged.
It can be seen that the older the MMR node is, the less frequently its verification path will be extended to reach a new accumulator entry.
An algorithm to produce the verifying path for any node i
is given in inclusion_proof_path
In general, given the height g
of the accumulator peak currently authenticating a node i
,
the verification path for i
will not change until the count of MMR leaves reaches
The old inclusion path will be a strict prefix of the new inclusion path.
An algorithm defining the packed accumulator for any MMR size S
is given by peaks
An algorithm which sets a bit for each present accumulator peaks in an MMR of size S
is given by leaf_count,
the produced value is also the count of leaves present in that MMR.
Lastly, many primitives for working with MMR's rely on a property of the position form of an MMR.
The position form for the complete MMR with size 8 MMR(8) is
7
3 6
1 2 4 5 8
Expressing this in binary notation reveals the property that MMR's make extensive use of:
111
11 110
1 10 100 101 1000
The left most node at any height is always "all ones".
The CBOR representation of an inclusion proof for MMRIVER is
inclusion-proof = bstr .cbor [
; zero based index of any node in the MMR
index: uint
; path from the node to its accumulator peak in MMR(mmr-size)
inclusion-path: [ + bstr ]
]
inclusion_proof_path(i, C)
is used to produce the verification paths for inclusion proofs and consistency proofs.
When a path is produced for the purposes of verifying or creating proofs, including the inclusion-path
referenced above,
the path elements MUST be resolved to the referenced node values.
The add_leaf_hash algorithm illustrates the use of the implementation define storage method get to accomplish this. For a pruned MMR, the referenced nodes are either present directly or are present in the accumulator. Managing the availability of the accumulator is the callers responsibility, and SHOULD typically be accomplished in the implementation specific get method.
Given:
C
the index of the last node in any complete MMR which containsi
.i
the index of the mmr node whose verification path is required.
And the methods:
- index_height which obtains the zero based height
g
of any node.
And the constraints:
i <= C
We define inclusion_proof_path
as:
def inclusion_proof_path(i, c):
path = []
g = index_height(i)
while True:
# The sibling of i is at i +/- 2^(g+1)
siblingoffset = (2 << g)
# If the index after i is higher, it is the left parent,
# and i is the right sibling
if index_height(i+1) > g:
# The witness to the right sibling is offset behind i
isibling = i - siblingoffset + 1
# The parent of a right sibling is stored immediately
# after
i += 1
else:
# The witness to a left sibling is offset ahead of i
isibling = i + siblingoffset - 1
# The parent of a left sibling is stored immediately after
# its right sibling
i += siblingoffset
# When the computed sibling exceedes the range of MMR(C+1),
# we have completed the path
if isibling > c:
return path
path.append(isibling)
# Set g to the height of the next item in the path.
g += 1
The proof obtained by inclusion_proof_path can be verified against any MMR size which includes i
,
as it is a prefix of any proof produced by a consistent future log state.
Assuming the constraints:
i < c0
c0 < c1
And the methods:
- parent which obtains the parent node index of any node
The following hold for all MMR(c0) and MMR(c1):
path_c0 = inclusion_proof_path(i, c0)
path_c1 = inclusion_proof_path(parent(path_c0[-1]), c1)
path = inclusion_proof_path(i, c1) == path_c0 + path_c1
Note: the python specific list access syntax path_c0[-1]
obtains the last element of the array path_c0
.
This is the basis on which consistent inclusion, or otherwise, can be show for any individually proven node i
.
The cbor representation of an inclusion proof for MMRIVER is:
protected-header-map = {
&(alg: 1) => int
&(vds: 395) => int
* cose-label => cose-value
}
- alg (label: 1): REQUIRED. Signature algorithm identifier. Value type: int.
- vds (label: 395): REQUIRED. verifiable data structure algorithm identifier. Value type: int.
The unprotected header for an MMRIVER inclusion proof signature is:
inclusion-proofs = [ + inclusion-proof ]
verifiable-proofs = {
&(inclusion-proof: -1) => inclusion-proofs
}
unprotected-header-map = {
&(vdp: 396) => verifiable-proofs
* cose-label => cose-value
}
The payload of an MMRIVER inclusion proof signature is the accumulator peak committing to the nodes inclusion, or the node itself where the proof path is empty. When the path is non-empty, the parent of the last witness node in the proof is also the accumulator peak. The algorithm included_root obtains this value.
The payload MUST be detached. Detaching the payload forces verifiers to recompute the root from the inclusion proof signature, this protects against implementation errors where the signature is verified but the merkle root does not match the inclusion proof.
- Recompute the root from the path and the element for which inclusion is being shown using included_root.
For a leaf node, this is obtained via
H(x)
as defined by the application. For an interior node, this is read directly from the log, or a replicated portion of it, using the implementation define storage method get. - Verify the signature using the obtained root as the detached payload.
The algorithm included_root
calculates the accumulator peak for the provided proof and node value.
Note that both interior and leaf nodes are handled identically.
Given:
i
is the index thenodeHash
is to be shown atnodehash
the value whose inclusion is to be shownproof
is the path of ibling values committing i. They recreate the unique accumulator peak that committed i to the MMR state from which the proof was produced.
And the methods:
- index_height which obtains the zero based height
g
of any node. - hash_pospair64 which applies
H
to the new node position and its children.
We define included_root
as:
def included_root(i, nodehash, proof):
root = nodehash
g = index_height(i)
for sibling in proof:
# If the index after i is higher, it is the left parent,
# and i is the right sibling
if index_height(i + 1) > g:
# The parent of a right sibling is stored immediately after
i = i + 1
# Set `root` to `H(i+1 || sibling || root)`
root = hash_pospair64(i + 1, sibling, root)
else:
# The parent of a left sibling is stored immediately after
# its right sibling.
i = i + (2 << g)
# Set `root` to `H(i+1 || root || sibling)`
root = hash_pospair64(i + 1, root, sibling)
# Set g to the height of the next item in the path.
g = g + 1
# If the path length was zero, the original nodehash is returned
return root
The cbor representation of a consistency proof for MMRIVER is:
consistency-path = [ * bstr ]
consistency-proof = bstr .cbor [
; previous MMR size
mmr-size-1: uint
; latest MMR size
mmr-size-2: uint
; the inclusion path from each accumulator peak in
; MMR(mmr-size-1) to its new accumulator peak in
; MMR(mmr-size-2).
consistency-paths: [ + consistency-path ]
]
Creates a proof of consistency between the identified MMR's.
The returned value is a list containing a single proof of inclusion for each peak from the first MMR state in the second MMR state.
When a path is produced for the purposes of verifying or creating proofs,
including the inclusion-path
referenced above,
the path elements MUST be resolved to the referenced node values.
The add_leaf_hash algorithm illustrates the use of the implementation define storage method get to accomplish this.
Given:
ifrom
is the last node of the completeMMR(ifrom + 1)
ito
is the last node of the completeMMR(ito + 1)
And the methods:
And the constraints:
ifrom <= ito
We define consistency_proof_paths
as:
def consistency_proof_paths(ifrom, ito):
proof = []
for i in peaks(ifrom):
proof.append(inclusion_proof_path(i, ito))
return proof
The cbor representation of an inclusion proof for MMRIVER is:
protected-header-map = {
&(alg: 1) => int
&(vds: 395) => int
* cose-label => cose-value
}
- alg (label: 1): REQUIRED. Signature algorithm identifier. Value type: int.
- vds (label: 395): REQUIRED. verifiable data structure algorithm identifier. Value type: int.
The unprotected header for an MMRIVER inclusion proof signature is:
consistency-proofs = [ + consistency-proof ]
verifiable-proofs = {
&(consistency-proof: -2) => consistency-proofs
}
unprotected-header-map = {
&(vdp: 396) => verifiable-proofs
* cose-label => cose-value
}
The payload MUST be detached. Detaching the payload forces verifiers to recompute the roots from the consistency proof signature. This protects against implementation errors where the signature is verified but the nodes in the new accumulator do not match the inclusion proofs for the nodes comprising the old accumulator.
- Recompute the prefix of the accumulator for
MMR(mmr-size-2)
from the proofs in the receipt using the algorithm consistent_roots - Verify the signature using the obtained prefix as the detached payload.
consistent_roots
is supplied with the accumulator from which consistency is being shown,
and an inclusion proof for each accumulator entry in a future MMR state.
The algorithm recovers the necessary prefix (peaks) of the future accumulator against which the proofs were obtained.
It is typical that many nodes in the original accumulator share the same peak in the new accumulator.
The returned list will be a descending height ordered list of elements from the accumulator
for the consistent future state.
It may be exactly the future accumulator or it may be a prefix of it.
The order of the roots returned by consistent_roots
matches the order of the nodes in the accumulator.
Implementations MUST require that the number of peaks returned by peaks(ifrom)
equals the number of entries in accumulatorfrom
.
Given:
ifrom
the last node index in the complete MMR from which consistency was proven.accumulatorfrom
the node values correponding to the peaks of the accumulator atMMR(mmr-size-1)
proofs
the inclusion proofs for each node inaccumulatorfrom
inMMR(mmr-size-2)
And the methods:
We define consistent_roots
as:
def consistent_roots(ifrom, accumulatorfrom, proofs):
frompeaks = peaks(ifrom)
# if length(frompeaks) != length(proofs) -> ERROR
roots = []
for i in range(len(accumulatorfrom)):
root = included_root(
frompeaks[i], accumulatorfrom[i], proofs[i])
# The nature of MMR's is that many nodes are committed by the
# same accumulator peak, and that peak changes with
# low frequency.
if roots and roots[-1] == root:
continue
roots.append(root)
return roots
When a new node is appended, if its height matches the height of its immediate predecessor, then we can complete a larger tree by merging the adjacent peaks, which we do by appending a new node which takes the adjacent peaks as its left and right children. This process proceeds until there are no more completable sub trees, needing only the previous peak at each step. For every even numbered node addition, adding a new leaf will always merge at least one preceding peak.
add_leaf_hash(f)
adds the leaf hash value f to the MMR. The resulting MMR is always complete.
As defined in Node values, the interior nodes each commit the size of the MMR, which is just the node index + 1. This makes it impossible to create a leaf whose value collides with an interior node. This protects the MMR against second pre-image attacks.
It is assumed that the algorithm terminates and returns on any transient error.
Given:
f
the leaf value resulting fromH(x)
for the caller defined leaf valuex
db
an interface supporting the append and get implementation defined storage methods.
And the methods:
We define add_leaf_hash
as
def add_leaf_hash(db, f: bytes):
# Set g to 0, the height of the leaf item f
g = 0
# Set i to the result of invoking Append(f)
i = db.append(f)
# If index_height(i) is greater than g (#looptarget)
while index_height(i) > g:
# Set ileft to the index of the left child of i,
# which is i - 2^(g+1)
ileft = i - (2 << g)
# Set iright to the index of the the right child of i,
# which is i - 1
iright = i - 1
# Set v to H(i + 1 || Get(ileft) || Get(iright))
# Set i to the result of invoking Append(v)
i = db.append(
hash_pospair64(i+1, db.get(ileft), db.get(iright)))
1. Set g to the height of the new i, which is g + 1`
g += 1
return i
The following methods are assumed to be available to the implementation. Very minimal requirements are specified.
Informally, the storage must be array like and have no gaps.
Reads the value from the MMR at the supplied index.
Used by any algorithm which needs access to node values.
The read MUST be consistent with any other calls to Append or Get within the same algorithm invocation.
Get MAY fail for transient reasons.
Appends new node to storage and returns the index that will be occupied by the node provided to the next call to append.
The implementation MUST guarantee that the results of Append are immediately available to Get calls in the same invocation of the algorithm OR fail.
Append MUST return the node i
identifying the node location which comes next.
There MUST be a 1 to 1 correspondence between the MMR node index and the storage location of the node's value.
The implementation MUST guarantee that the storage organization is linear and non-sparse.
Implementations MAY rely on the verifiable properties of the MMR, or optimistic concurrency control, to afford detection of accidental or competing overwrites.
Used only by add_leaf_hash
The implementation MAY defer commitment to underlying persistent storage.
Append MAY fail for transient reasons.
Interior nodes in the MMR SHALL prefix the value provided to H(x)
with pos
.
The value v
for any interior node MUST be H(pos || Get(LEFT_CHILD) || Get(RIGHT_CHILD))
This naturally affords the pre-image resistance typically obtained with specific leaf/interior node prefixes. Nonce schemes to account for duplicate leaves are also un-necessary as a result, but MAY be included by the application for other reasons.
The algorithm for leaf addition is provided the result of H(x)
directly.
The application MUST define how it produces x
such that parties reliant on the system for verification can recreate H(x)
.
Returns H(pos || a || b)
, which is the value for the node identified by index pos - 1
All interior nodes MUST commit the size of the MMR created by their addition by pre-pending the size to its child hashes.
Editors note: How this draft accommodates hash alg agility is tbd.
Given:
pos
the size of the MMR whose last node index ispos - 1
a
the first value to include in the hash afterpos
b
the second value to include in the hash afterpos
And the constraints:
pos < 2^64
a
andb
MUST be hashes produced by the appropriate hash alg.
We define hash_pospair64
as:
def hash_pospair64(pos, a, b):
# Note: Hash algorithm agility is tbd, this example uses SHA-256
h = hashlib.sha256()
# Take the big endian representation of pos
h.update(pos.to_bytes(8, byteorder="big", signed=False))
h.update(a)
h.update(b)
return h.digest()
index_height(i)
returns the zero based height g
of the node index i
Given:
i
the index of any mmr node.
We define index_height
as:
def index_height(i) -> int:
pos = i + 1
while not all_ones(pos):
pos = pos - most_sig_bit(pos) + 1
return bit_length(pos) - 1
peaks(i)
returns the peak indices for MMR(i+1)
, which is also its accumulator.
Assumes MMR(i+1) is complete, implementations can check for this condition by testing the height of i+1
Given:
i
the index of any mmr node.
We define peaks
as:
def peaks(i):
peak = 0
peaks = []
s = i+1
while s != 0:
# find the highest peak size in the current MMR(s)
highest_size = (1 << log2floor(s+1)) - 1
peak = peak + highest_size
peaks.append(peak-1)
s -= highest_size
return peaks
TODO Security
Editors note: Hash agility is desired. We can start with SHA-256. Two of the referenced implementations use BLAKE2b-256, We would like to add support for SHA3-256, SHA3-512, and possibly Keccak and Pedersen.
Editors note: we will require an addition to the CoMETER spec once it is accepted.
--- back
- RFC9162
- RFC9162_VerInc 2.1.3.1 Generating an Inclusion Proof
- RFC9162_VerCon 2.1.4.2 Verifying Consistency between Two Tree Heads
- PeterTodd
- CrosbyWallach
- CrosbySecondaryStorage 3.3 Storing the log on secondary storage
- PostOrderTlog
- KnuthTBT 2.3.1 Traversing Binary Trees
- BNT
- ReyzinYakoubov
- ProjectSilica
leaf_count(i)
Returns a the count of leaves in MMR(i+1)
The bits of the count also form a mask, where a single bit is set for each peak present in the accumulator. The bit position is the height of the binary tree committing the elements to the corresponding accumulator entry.
The (sparse) accumulator entry is also derived from the height as accummulator[len(accumulator) - bitpos]
Where accumulator is the list of accumulator peak indices in descending order of height and bitpos is any bit set in the leaf count.
Given:
i
the index of any mmr node.
And the methods:
- bit_length which returns the number of bits required to represent the argument.
We define leaf_count
as:
def leaf_count(i):
s = i + 1
# Establish the largest relevant complete tree as our starting point
peaksize = (1 << bit_length(s)) - 1
peakmap = 0
while peaksize > 0:
peakmap <<= 1
# At each round we halve peak size, if doing so causes our
# current value for s to excede the remaining peak size, we need
# the peak in the accumulator.
if s >= peaksize:
s -= peaksize
peakmap |= 1
peaksize >>= 1
return peakmap
Returns the node index i
locating the leaf in the MMR
Given:
e
the index of a leaf (where the leaves are considered in isolation)
And the methods:
- bit_length which returns the number of bits required to represent the argument.
We define mmr_index
as:
def mmr_index(e):
sum = 0
while e > 0:
# The bit length of e is its 1 based height `h`
h = bit_length(e)
sum += (1 << h) - 1
half = 1 << (h - 1)
e -= half
return sum
Returns the parent of the supplied node index.
Given:
i
the index of any mmr node.
And the methods:
We define parent
as:
def parent(i):
g = index_height(i)
if index_height(i + 1) > g:
# The next node is higher, so it is the parent.
return i + 1
# i is the left sibling, so the parent is the offset to the right
# sibling + 1, which is just 2^(g+1)
return i + (2 << g)
Return i
if MMR(i+1)
is complete, and the next complete node index otherwise.
Many of the algorithms specify dealing with complete mmr's.
This algorithm returns i if it is complete, and the index of the next node corresponding to a complete mmr otherwise.
Given:
i
a node index
And the methods:
We define complate_mmr
as:
def complete_mmr(i):
h0 = index_height(i)
h1 = index_height(i + 1)
while h0 < h1:
i += 1
h0 = h1
h1 = index_height(i + 1)
return i
MMR's are a series of complete binary trees followed by at most one incomplete tree. This is sometimes referred to as a flat base tree. In these constructions many operations are formally
However, precisely because of the binary nature of the MMR construction, most benefit from single-cycle assembly level optimizations, assuming a counter limit of
Finding the position of the first non-zero bit or counting the number of bits that are set are both primitives necessary for some of the algorithms.
CLZ has single-cycle implementations on most architectures. Similarly, POPCNT
exists.
AMD defined some useful binary manipulation extensions.
Sympathetic instructions, or compact look up table implementations exist for other fundamental operations too. Most languages have sensible standard wrappers. While these operations are not strictly O(1) complexity, this has little impact in practice.
Returns the floor of log base 2 x
def log2floor(x):
return x.bit_length() - 1
Returns the mask for the the most significant bit in pos
1 << (bit_length(pos) - 1)
Expressed in python
def most_sig_bit(pos) -> int:
return 1 << (pos.bit_length() - 1)
We assume the following primitives for working with bits as they commonly have library or hardware support.
The minimum number of bits to represent pos. b011 would be 2, b010 would be 2, and b001 would be 1.
In python,
def bit_length(pos):
return pos.bit_length()
Tests if all bits, from the most significant that is set, are 1, b0111 would be true, b0101 would be false.
In python,
def all_ones(pos) -> bool:
msb = most_sig_bit(pos)
mask = (1 << (msb + 1)) - 1
return pos == mask
Count of set bits. For example ones_count(b101)
is 2
The count of nodes above and to the left of pos
In python,
(v & -v).bit_length() - 1
Note to RFC Editor: Please remove this section as well as references to BCP205 before AUTH48.
This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in BCP205. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs. Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features. Readers are advised to note that other implementations may exist.
According to BCP205, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit".
An open-source implementation was initiated and is maintained by Data Trails Inc. - DataTrails.
Uses SHA-256 as the hash alg
An application demonstrating the concepts is available at https://app.datatrails.ai/.
An open-source implementation is available at:
Used in production. SEMVER unstable (no backwards compat declared yet)
Almost compatible, where here the leaf hash is not defined, in Peter Todd's formal description, all nodes, including the leaves include the position in the hash. In this specification, leaf hashes are added 'as is'. Interior nodes commit to the size of the entire MMR including the interior node.
Reference implementation, but the "original".
A minimal reference implementation of this draft. Used to generate the test vectors in this draft, is available at:
Reference only
Is specifically committing to positions as we describe, but is committing zero based indices, and uses BLAKE2B as the HASH-ALG. Accounting for those differences, their commitment trees would be compatible with this draft.
An implementation is available here:
- https://github.com/mimblewimble/grin/blob/master/doc/mmr.md (Grin is a rust implementation of the mimblewimble protocol)
- https://github.com/BeamMW/beam/blob/master/core/merkle.cpp (Beam is a C++ implementation of the mimblewimble protocol)
Uses an incompatible scheme for committing the sub trees, and additionally specifies how the leaf hash is produced.
TODO: check if they are to positions as we describe, if so their commitment trees should be compatible with this draft.
The code's level of maturity is considered to be "prototype".
### Herodotus
https://github.com/HerodotusDev/rust-accumulators
Production, supports keccak, posiedon & pedersen hash algs
Incompatible, does not include commitment of position in the interior node hash
In this section we provide known answer outputs for the various algorithms for the MMR(39)
Editors note: The MMR table is split in two due to format restrictions.
The node indices for MMR(39)
(leaves 0-15) are
g
4 30
3 14 29
/ \
/ \
/ \
/ \
/ \
2 6 13 21 28
/ \ / \ / \
1 2 5 9 12 17 20 24 27
/ \ / \ / \ / \ / \ / \
0 0 1 3 4 7 8 10 11 15 16 18 19 22 23 25 26
. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 e
The node indices for MMR(39)
(leaves 16 - 20) are
g
2 37
1 33 36
0 31 32 34 35 38
. 16 17 18 19 20 e
The vertical axis is g
, the zero based height of the MMR.
The horizontal axis is e
, the leaf indices corresponding to the g=0
nodes in the MMR
We define H(v)
for test vector leaf values f
as the SHA-256 hash of the the big endian representation of e
.
e | leaf values |
---|---|
0 | af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc |
1 | cd2662154e6d76b2b2b92e70c0cac3ccf534f9b74eb5b89819ec509083d00a50 |
2 | d5688a52d55a02ec4aea5ec1eadfffe1c9e0ee6a4ddbe2377f98326d42dfc975 |
3 | 8005f02d43fa06e7d0585fb64c961d57e318b27a145c857bcd3a6bdb413ff7fc |
4 | a3eb8db89fc5123ccfd49585059f292bc40a1c0d550b860f24f84efb4760fbf2 |
5 | 4c0e071832d527694adea57b50dd7b2164c2a47c02940dcf26fa07c44d6d222a |
6 | 8d85f8467240628a94819b26bee26e3a9b2804334c63482deacec8d64ab4e1e7 |
7 | 0b5000b73a53f0916c93c68f4b9b6ba8af5a10978634ae4f2237e1f3fbe324fa |
8 | e66c57014a6156061ae669809ec5d735e484e8fcfd540e110c9b04f84c0b4504 |
9 | 998e907bfbb34f71c66b6dc6c40fe98ca6d2d5a29755bc5a04824c36082a61d1 |
10 | 5bc67471c189d78c76461dcab6141a733bdab3799d1d69e0c419119c92e82b3d |
11 | 1b8d0103e3a8d9ce8bda3bff71225be4b5bb18830466ae94f517321b7ecc6f94 |
12 | 7a42e3892368f826928202014a6ca95a3d8d846df25088da80018663edf96b1c |
13 | aed2b8245fdc8acc45eda51abc7d07e612c25f05cadd1579f3474f0bf1f6bdc6 |
14 | 561f627b4213258dc8863498bb9b07c904c3c65a78c1a36bca329154d1ded213 |
15 | 1209fe3bc3497e47376dfbd9df0600a17c63384c85f859671956d8289e5a0be8 |
16 | 1664a6e0ea12d234b4911d011800bb0f8c1101a0f9a49a91ee6e2493e34d8e7b |
17 | 707d56f1f282aee234577e650bea2e7b18bb6131a499582be18876aba99d4b60 |
18 | 4d75f61869104baa4ccff5be73311be9bdd6cc31779301dfc699479403c8a786 |
19 | 0764c726a72f8e1d245f332a1d022fffdada0c4cb2a016886e4b33b66cb9a53f |
20 | e9a5f5201eb3c3c856e0a224527af5ac7eb1767fb1aff9bd53ba41a60cde9785 |
i | node values |
---|---|
0 | af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc |
1 | cd2662154e6d76b2b2b92e70c0cac3ccf534f9b74eb5b89819ec509083d00a50 |
2 | ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
3 | d5688a52d55a02ec4aea5ec1eadfffe1c9e0ee6a4ddbe2377f98326d42dfc975 |
4 | 8005f02d43fa06e7d0585fb64c961d57e318b27a145c857bcd3a6bdb413ff7fc |
5 | 9a18d3bc0a7d505ef45f985992270914cc02b44c91ccabba448c546a4b70f0f0 |
6 | 827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
7 | a3eb8db89fc5123ccfd49585059f292bc40a1c0d550b860f24f84efb4760fbf2 |
8 | 4c0e071832d527694adea57b50dd7b2164c2a47c02940dcf26fa07c44d6d222a |
9 | b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
10 | 8d85f8467240628a94819b26bee26e3a9b2804334c63482deacec8d64ab4e1e7 |
11 | 0b5000b73a53f0916c93c68f4b9b6ba8af5a10978634ae4f2237e1f3fbe324fa |
12 | 6f3360ad3e99ab4ba39f2cbaf13da56ead8c9e697b03b901532ced50f7030fea |
13 | 508326f17c5f2769338cb00105faba3bf7862ca1e5c9f63ba2287e1f3cf2807a |
14 | 78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
15 | e66c57014a6156061ae669809ec5d735e484e8fcfd540e110c9b04f84c0b4504 |
16 | 998e907bfbb34f71c66b6dc6c40fe98ca6d2d5a29755bc5a04824c36082a61d1 |
17 | f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
18 | 5bc67471c189d78c76461dcab6141a733bdab3799d1d69e0c419119c92e82b3d |
19 | 1b8d0103e3a8d9ce8bda3bff71225be4b5bb18830466ae94f517321b7ecc6f94 |
20 | 0a4d7e66c92de549b765d9e2191027ff2a4ea8a7bd3eb04b0ed8ee063bad1f70 |
21 | 61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
22 | 7a42e3892368f826928202014a6ca95a3d8d846df25088da80018663edf96b1c |
23 | aed2b8245fdc8acc45eda51abc7d07e612c25f05cadd1579f3474f0bf1f6bdc6 |
24 | dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
25 | 561f627b4213258dc8863498bb9b07c904c3c65a78c1a36bca329154d1ded213 |
26 | 1209fe3bc3497e47376dfbd9df0600a17c63384c85f859671956d8289e5a0be8 |
27 | 6b4a3bd095c63d1dffae1ac03eb8264fdce7d51d2ac26ad0ebf9847f5b9be230 |
28 | 4459f4d6c764dbaa6ebad24b0a3df644d84c3527c961c64aab2e39c58e027eb1 |
29 | 77651b3eec6774e62545ae04900c39a32841e2b4bac80e2ba93755115252aae1 |
30 | d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
31 | 1664a6e0ea12d234b4911d011800bb0f8c1101a0f9a49a91ee6e2493e34d8e7b |
32 | 707d56f1f282aee234577e650bea2e7b18bb6131a499582be18876aba99d4b60 |
33 | 0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
34 | 4d75f61869104baa4ccff5be73311be9bdd6cc31779301dfc699479403c8a786 |
35 | 0764c726a72f8e1d245f332a1d022fffdada0c4cb2a016886e4b33b66cb9a53f |
36 | c861552e9e17c41447d375c37928f9fa5d387d1e8470678107781c20a97ebc8f |
37 | 6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
38 | e9a5f5201eb3c3c856e0a224527af5ac7eb1767fb1aff9bd53ba41a60cde9785 |
(peaks)[#peaks] will produce the following index lists.
i | accumulator peaks |
---|---|
0 | 0 |
2 | 2 |
3 | 2, 3 |
6 | 6 |
7 | 6, 7 |
9 | 6, 9 |
10 | 6, 9, 10 |
14 | 14 |
15 | 14, 15 |
17 | 14, 17 |
18 | 14, 17, 18 |
21 | 14, 21 |
22 | 14, 21, 22 |
24 | 14, 21, 24 |
25 | 14, 21, 24, 25 |
30 | 30 |
31 | 30, 31 |
33 | 30, 33 |
34 | 30, 33, 34 |
37 | 30, 37 |
38 | 30, 37, 38 |
The indices will retrieve the following values from the MMR. The row indices, starting with 0, are the corresponding mmr node indices 0-38
accumulator peaks |
---|
af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc |
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8, d5688a52d55a02ec4aea5ec1eadfffe1c9e0ee6a4ddbe2377f98326d42dfc975 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88, a3eb8db89fc5123ccfd49585059f292bc40a1c0d550b860f24f84efb4760fbf2 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88, b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88, b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d, 8d85f8467240628a94819b26bee26e3a9b2804334c63482deacec8d64ab4e1e7 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, e66c57014a6156061ae669809ec5d735e484e8fcfd540e110c9b04f84c0b4504 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21, 5bc67471c189d78c76461dcab6141a733bdab3799d1d69e0c419119c92e82b3d |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, 61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, 61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710, 7a42e3892368f826928202014a6ca95a3d8d846df25088da80018663edf96b1c |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, 61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710, dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112, 61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710, dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae, 561f627b4213258dc8863498bb9b07c904c3c65a78c1a36bca329154d1ded213 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7, 1664a6e0ea12d234b4911d011800bb0f8c1101a0f9a49a91ee6e2493e34d8e7b |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7, 0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7, 0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f, 4d75f61869104baa4ccff5be73311be9bdd6cc31779301dfc699479403c8a786 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7, 6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa, e9a5f5201eb3c3c856e0a224527af5ac7eb1767fb1aff9bd53ba41a60cde9785 |
These tables cover the outputs of index_height
and leaf_count
.
g=index_height
, e
& m
are the decimal and binary representations of leaf_count
m
is the bit map of peaks, and also the binary representation of e
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
g | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 |
e | 1 | 1 | 2 | 3 | 3 | 3 | 4 | 5 | 5 | 6 |
m | 1 | 1 | 10 | 11 | 11 | 11 | 100 | 101 | 101 | 110 |
i | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
g | 0 | 0 | 1 | 2 | 3 | 0 | 0 | 1 | 0 | 0 | 1 | 2 |
e | 7 | 7 | 7 | 7 | 8 | 9 | 9 | 10 | 11 | 11 | 11 | 12 |
m | 111 | 111 | 111 | 111 | 1000 | 1001 | 1001 | 1010 | 1011 | 1011 | 1011 | 1100 |
i | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
g | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 3 | 4 | 0 | 0 | 1 |
e | 13 | 13 | 14 | 15 | 15 | 15 | 15 | 15 | 16 | 17 | 17 | 18 |
m | 1101 | 1101 | 1110 | 1111 | 1111 | 1111 | 1111 | 1111 | 10000 | 10001 | 10001 | 10010 |
i | 34 | 35 | 36 | 37 | 38 |
---|---|---|---|---|---|
g | 0 | 0 | 1 | 2 | 0 |
e | 19 | 19 | 19 | 20 | 21 |
m | 10011 | 10011 | 10011 | 10100 | 10101 |
- The inclusion path column defines the outputs of inclusion_proof_path)
- The accumlator column shows the output of [peaks][#peaks], but adjusted index the storage.
- The accumulator root index shows the output of PeakIndex
- The root column shows the value in the storage corresponding to the index in accumulator selected by the accumulator_root_index. Eg `storage[]
This table illustrates the low, and predictably reducing, rate with which the root changes for any single entry in the MMR. Each time the root for a leaf changes, the validity period doubles.
This table also ilustrates that the verification path for any single entry only ever grows. It is therefore guaranteed to be a prefix of any future path for the same entry.
| i | MMR |inclusion path |accumulator|accumulator root index| | 0|in MMR(1)|[] |[0] |0 | | 0|in MMR(3)|[1] |[2] |0 | | 0|in MMR(4)|[1] |[2, 3] |0 | | 0|in MMR(7)|[1, 5] |[6] |0 | | 0|in MMR(8)|[1, 5] |[6, 7] |0 | | 0|in MMR(10)|[1, 5] |[6, 9] |0 | | 0|in MMR(11)|[1, 5] |[6, 9, 10] |0 | | 0|in MMR(15)|[1, 5, 13] |[14] |0 | | 0|in MMR(16)|[1, 5, 13] |[14, 15] |0 | | 0|in MMR(18)|[1, 5, 13] |[14, 17] |0 | | 0|in MMR(19)|[1, 5, 13] |[14, 17, 18] |0 | | 0|in MMR(22)|[1, 5, 13] |[14, 21] |0 | | 0|in MMR(23)|[1, 5, 13] |[14, 21, 22] |0 | | 0|in MMR(25)|[1, 5, 13] |[14, 21, 24] |0 | | 0|in MMR(26)|[1, 5, 13] |[14, 21, 24, 25] |0 | | 0|in MMR(31)|[1, 5, 13, 29] |[30] |0 | | 0|in MMR(32)|[1, 5, 13, 29] |[30, 31] |0 | | 0|in MMR(34)|[1, 5, 13, 29] |[30, 33] |0 | | 0|in MMR(35)|[1, 5, 13, 29] |[30, 33, 34] |0 | | 0|in MMR(38)|[1, 5, 13, 29] |[30, 37] |0 | | 0|in MMR(39)|[1, 5, 13, 29] |[30, 37, 38] |0 | | 1|in MMR(3)|[0] |[2] |0 | | 1|in MMR(4)|[0] |[2, 3] |0 | | 1|in MMR(7)|[0, 5] |[6] |0 | | 1|in MMR(8)|[0, 5] |[6, 7] |0 | | 1|in MMR(10)|[0, 5] |[6, 9] |0 | | 1|in MMR(11)|[0, 5] |[6, 9, 10] |0 | | 1|in MMR(15)|[0, 5, 13] |[14] |0 | | 1|in MMR(16)|[0, 5, 13] |[14, 15] |0 | | 1|in MMR(18)|[0, 5, 13] |[14, 17] |0 | | 1|in MMR(19)|[0, 5, 13] |[14, 17, 18] |0 | | 1|in MMR(22)|[0, 5, 13] |[14, 21] |0 | | 1|in MMR(23)|[0, 5, 13] |[14, 21, 22] |0 | | 1|in MMR(25)|[0, 5, 13] |[14, 21, 24] |0 | | 1|in MMR(26)|[0, 5, 13] |[14, 21, 24, 25] |0 | | 1|in MMR(31)|[0, 5, 13, 29] |[30] |0 | | 1|in MMR(32)|[0, 5, 13, 29] |[30, 31] |0 | | 1|in MMR(34)|[0, 5, 13, 29] |[30, 33] |0 | | 1|in MMR(35)|[0, 5, 13, 29] |[30, 33, 34] |0 | | 1|in MMR(38)|[0, 5, 13, 29] |[30, 37] |0 | | 1|in MMR(39)|[0, 5, 13, 29] |[30, 37, 38] |0 | | 2|in MMR(3)|[] |[2] |0 | | 2|in MMR(4)|[] |[2, 3] |0 | | 2|in MMR(7)|[5] |[6] |0 | | 2|in MMR(8)|[5] |[6, 7] |0 | | 2|in MMR(10)|[5] |[6, 9] |0 | | 2|in MMR(11)|[5] |[6, 9, 10] |0 | | 2|in MMR(15)|[5, 13] |[14] |0 | | 2|in MMR(16)|[5, 13] |[14, 15] |0 | | 2|in MMR(18)|[5, 13] |[14, 17] |0 | | 2|in MMR(19)|[5, 13] |[14, 17, 18] |0 | | 2|in MMR(22)|[5, 13] |[14, 21] |0 | | 2|in MMR(23)|[5, 13] |[14, 21, 22] |0 | | 2|in MMR(25)|[5, 13] |[14, 21, 24] |0 | | 2|in MMR(26)|[5, 13] |[14, 21, 24, 25] |0 | | 2|in MMR(31)|[5, 13, 29] |[30] |0 | | 2|in MMR(32)|[5, 13, 29] |[30, 31] |0 | | 2|in MMR(34)|[5, 13, 29] |[30, 33] |0 | | 2|in MMR(35)|[5, 13, 29] |[30, 33, 34] |0 | | 2|in MMR(38)|[5, 13, 29] |[30, 37] |0 | | 2|in MMR(39)|[5, 13, 29] |[30, 37, 38] |0 | | 3|in MMR(4)|[] |[2, 3] |1 | | 3|in MMR(7)|[4, 2] |[6] |0 | | 3|in MMR(8)|[4, 2] |[6, 7] |0 | | 3|in MMR(10)|[4, 2] |[6, 9] |0 | | 3|in MMR(11)|[4, 2] |[6, 9, 10] |0 | | 3|in MMR(15)|[4, 2, 13] |[14] |0 | | 3|in MMR(16)|[4, 2, 13] |[14, 15] |0 | | 3|in MMR(18)|[4, 2, 13] |[14, 17] |0 | | 3|in MMR(19)|[4, 2, 13] |[14, 17, 18] |0 | | 3|in MMR(22)|[4, 2, 13] |[14, 21] |0 | | 3|in MMR(23)|[4, 2, 13] |[14, 21, 22] |0 | | 3|in MMR(25)|[4, 2, 13] |[14, 21, 24] |0 | | 3|in MMR(26)|[4, 2, 13] |[14, 21, 24, 25] |0 | | 3|in MMR(31)|[4, 2, 13, 29] |[30] |0 | | 3|in MMR(32)|[4, 2, 13, 29] |[30, 31] |0 | | 3|in MMR(34)|[4, 2, 13, 29] |[30, 33] |0 | | 3|in MMR(35)|[4, 2, 13, 29] |[30, 33, 34] |0 | | 3|in MMR(38)|[4, 2, 13, 29] |[30, 37] |0 | | 3|in MMR(39)|[4, 2, 13, 29] |[30, 37, 38] |0 | | 4|in MMR(7)|[3, 2] |[6] |0 | | 4|in MMR(8)|[3, 2] |[6, 7] |0 | | 4|in MMR(10)|[3, 2] |[6, 9] |0 | | 4|in MMR(11)|[3, 2] |[6, 9, 10] |0 | | 4|in MMR(15)|[3, 2, 13] |[14] |0 | | 4|in MMR(16)|[3, 2, 13] |[14, 15] |0 | | 4|in MMR(18)|[3, 2, 13] |[14, 17] |0 | | 4|in MMR(19)|[3, 2, 13] |[14, 17, 18] |0 | | 4|in MMR(22)|[3, 2, 13] |[14, 21] |0 | | 4|in MMR(23)|[3, 2, 13] |[14, 21, 22] |0 | | 4|in MMR(25)|[3, 2, 13] |[14, 21, 24] |0 | | 4|in MMR(26)|[3, 2, 13] |[14, 21, 24, 25] |0 | | 4|in MMR(31)|[3, 2, 13, 29] |[30] |0 | | 4|in MMR(32)|[3, 2, 13, 29] |[30, 31] |0 | | 4|in MMR(34)|[3, 2, 13, 29] |[30, 33] |0 | | 4|in MMR(35)|[3, 2, 13, 29] |[30, 33, 34] |0 | | 4|in MMR(38)|[3, 2, 13, 29] |[30, 37] |0 | | 4|in MMR(39)|[3, 2, 13, 29] |[30, 37, 38] |0 | | 5|in MMR(7)|[2] |[6] |0 | | 5|in MMR(8)|[2] |[6, 7] |0 | | 5|in MMR(10)|[2] |[6, 9] |0 | | 5|in MMR(11)|[2] |[6, 9, 10] |0 | | 5|in MMR(15)|[2, 13] |[14] |0 | | 5|in MMR(16)|[2, 13] |[14, 15] |0 | | 5|in MMR(18)|[2, 13] |[14, 17] |0 | | 5|in MMR(19)|[2, 13] |[14, 17, 18] |0 | | 5|in MMR(22)|[2, 13] |[14, 21] |0 | | 5|in MMR(23)|[2, 13] |[14, 21, 22] |0 | | 5|in MMR(25)|[2, 13] |[14, 21, 24] |0 | | 5|in MMR(26)|[2, 13] |[14, 21, 24, 25] |0 | | 5|in MMR(31)|[2, 13, 29] |[30] |0 | | 5|in MMR(32)|[2, 13, 29] |[30, 31] |0 | | 5|in MMR(34)|[2, 13, 29] |[30, 33] |0 | | 5|in MMR(35)|[2, 13, 29] |[30, 33, 34] |0 | | 5|in MMR(38)|[2, 13, 29] |[30, 37] |0 | | 5|in MMR(39)|[2, 13, 29] |[30, 37, 38] |0 | | 6|in MMR(7)|[] |[6] |0 | | 6|in MMR(8)|[] |[6, 7] |0 | | 6|in MMR(10)|[] |[6, 9] |0 | | 6|in MMR(11)|[] |[6, 9, 10] |0 | | 6|in MMR(15)|[13] |[14] |0 | | 6|in MMR(16)|[13] |[14, 15] |0 | | 6|in MMR(18)|[13] |[14, 17] |0 | | 6|in MMR(19)|[13] |[14, 17, 18] |0 | | 6|in MMR(22)|[13] |[14, 21] |0 | | 6|in MMR(23)|[13] |[14, 21, 22] |0 | | 6|in MMR(25)|[13] |[14, 21, 24] |0 | | 6|in MMR(26)|[13] |[14, 21, 24, 25] |0 | | 6|in MMR(31)|[13, 29] |[30] |0 | | 6|in MMR(32)|[13, 29] |[30, 31] |0 | | 6|in MMR(34)|[13, 29] |[30, 33] |0 | | 6|in MMR(35)|[13, 29] |[30, 33, 34] |0 | | 6|in MMR(38)|[13, 29] |[30, 37] |0 | | 6|in MMR(39)|[13, 29] |[30, 37, 38] |0 | | 7|in MMR(8)|[] |[6, 7] |1 | | 7|in MMR(10)|[8] |[6, 9] |1 | | 7|in MMR(11)|[8] |[6, 9, 10] |1 | | 7|in MMR(15)|[8, 12, 6] |[14] |0 | | 7|in MMR(16)|[8, 12, 6] |[14, 15] |0 | | 7|in MMR(18)|[8, 12, 6] |[14, 17] |0 | | 7|in MMR(19)|[8, 12, 6] |[14, 17, 18] |0 | | 7|in MMR(22)|[8, 12, 6] |[14, 21] |0 | | 7|in MMR(23)|[8, 12, 6] |[14, 21, 22] |0 | | 7|in MMR(25)|[8, 12, 6] |[14, 21, 24] |0 | | 7|in MMR(26)|[8, 12, 6] |[14, 21, 24, 25] |0 | | 7|in MMR(31)|[8, 12, 6, 29] |[30] |0 | | 7|in MMR(32)|[8, 12, 6, 29] |[30, 31] |0 | | 7|in MMR(34)|[8, 12, 6, 29] |[30, 33] |0 | | 7|in MMR(35)|[8, 12, 6, 29] |[30, 33, 34] |0 | | 7|in MMR(38)|[8, 12, 6, 29] |[30, 37] |0 | | 7|in MMR(39)|[8, 12, 6, 29] |[30, 37, 38] |0 | | 8|in MMR(10)|[7] |[6, 9] |1 | | 8|in MMR(11)|[7] |[6, 9, 10] |1 | | 8|in MMR(15)|[7, 12, 6] |[14] |0 | | 8|in MMR(16)|[7, 12, 6] |[14, 15] |0 | | 8|in MMR(18)|[7, 12, 6] |[14, 17] |0 | | 8|in MMR(19)|[7, 12, 6] |[14, 17, 18] |0 | | 8|in MMR(22)|[7, 12, 6] |[14, 21] |0 | | 8|in MMR(23)|[7, 12, 6] |[14, 21, 22] |0 | | 8|in MMR(25)|[7, 12, 6] |[14, 21, 24] |0 | | 8|in MMR(26)|[7, 12, 6] |[14, 21, 24, 25] |0 | | 8|in MMR(31)|[7, 12, 6, 29] |[30] |0 | | 8|in MMR(32)|[7, 12, 6, 29] |[30, 31] |0 | | 8|in MMR(34)|[7, 12, 6, 29] |[30, 33] |0 | | 8|in MMR(35)|[7, 12, 6, 29] |[30, 33, 34] |0 | | 8|in MMR(38)|[7, 12, 6, 29] |[30, 37] |0 | | 8|in MMR(39)|[7, 12, 6, 29] |[30, 37, 38] |0 | | 9|in MMR(10)|[] |[6, 9] |1 | | 9|in MMR(11)|[] |[6, 9, 10] |1 | | 9|in MMR(15)|[12, 6] |[14] |0 | | 9|in MMR(16)|[12, 6] |[14, 15] |0 | | 9|in MMR(18)|[12, 6] |[14, 17] |0 | | 9|in MMR(19)|[12, 6] |[14, 17, 18] |0 | | 9|in MMR(22)|[12, 6] |[14, 21] |0 | | 9|in MMR(23)|[12, 6] |[14, 21, 22] |0 | | 9|in MMR(25)|[12, 6] |[14, 21, 24] |0 | | 9|in MMR(26)|[12, 6] |[14, 21, 24, 25] |0 | | 9|in MMR(31)|[12, 6, 29] |[30] |0 | | 9|in MMR(32)|[12, 6, 29] |[30, 31] |0 | | 9|in MMR(34)|[12, 6, 29] |[30, 33] |0 | | 9|in MMR(35)|[12, 6, 29] |[30, 33, 34] |0 | | 9|in MMR(38)|[12, 6, 29] |[30, 37] |0 | | 9|in MMR(39)|[12, 6, 29] |[30, 37, 38] |0 | | 10|in MMR(11)|[] |[6, 9, 10] |2 | | 10|in MMR(15)|[11, 9, 6] |[14] |0 | | 10|in MMR(16)|[11, 9, 6] |[14, 15] |0 | | 10|in MMR(18)|[11, 9, 6] |[14, 17] |0 | | 10|in MMR(19)|[11, 9, 6] |[14, 17, 18] |0 | | 10|in MMR(22)|[11, 9, 6] |[14, 21] |0 | | 10|in MMR(23)|[11, 9, 6] |[14, 21, 22] |0 | | 10|in MMR(25)|[11, 9, 6] |[14, 21, 24] |0 | | 10|in MMR(26)|[11, 9, 6] |[14, 21, 24, 25] |0 | | 10|in MMR(31)|[11, 9, 6, 29] |[30] |0 | | 10|in MMR(32)|[11, 9, 6, 29] |[30, 31] |0 | | 10|in MMR(34)|[11, 9, 6, 29] |[30, 33] |0 | | 10|in MMR(35)|[11, 9, 6, 29] |[30, 33, 34] |0 | | 10|in MMR(38)|[11, 9, 6, 29] |[30, 37] |0 | | 10|in MMR(39)|[11, 9, 6, 29] |[30, 37, 38] |0 | | 11|in MMR(15)|[10, 9, 6] |[14] |0 | | 11|in MMR(16)|[10, 9, 6] |[14, 15] |0 | | 11|in MMR(18)|[10, 9, 6] |[14, 17] |0 | | 11|in MMR(19)|[10, 9, 6] |[14, 17, 18] |0 | | 11|in MMR(22)|[10, 9, 6] |[14, 21] |0 | | 11|in MMR(23)|[10, 9, 6] |[14, 21, 22] |0 | | 11|in MMR(25)|[10, 9, 6] |[14, 21, 24] |0 | | 11|in MMR(26)|[10, 9, 6] |[14, 21, 24, 25] |0 | | 11|in MMR(31)|[10, 9, 6, 29] |[30] |0 | | 11|in MMR(32)|[10, 9, 6, 29] |[30, 31] |0 | | 11|in MMR(34)|[10, 9, 6, 29] |[30, 33] |0 | | 11|in MMR(35)|[10, 9, 6, 29] |[30, 33, 34] |0 | | 11|in MMR(38)|[10, 9, 6, 29] |[30, 37] |0 | | 11|in MMR(39)|[10, 9, 6, 29] |[30, 37, 38] |0 | | 12|in MMR(15)|[9, 6] |[14] |0 | | 12|in MMR(16)|[9, 6] |[14, 15] |0 | | 12|in MMR(18)|[9, 6] |[14, 17] |0 | | 12|in MMR(19)|[9, 6] |[14, 17, 18] |0 | | 12|in MMR(22)|[9, 6] |[14, 21] |0 | | 12|in MMR(23)|[9, 6] |[14, 21, 22] |0 | | 12|in MMR(25)|[9, 6] |[14, 21, 24] |0 | | 12|in MMR(26)|[9, 6] |[14, 21, 24, 25] |0 | | 12|in MMR(31)|[9, 6, 29] |[30] |0 | | 12|in MMR(32)|[9, 6, 29] |[30, 31] |0 | | 12|in MMR(34)|[9, 6, 29] |[30, 33] |0 | | 12|in MMR(35)|[9, 6, 29] |[30, 33, 34] |0 | | 12|in MMR(38)|[9, 6, 29] |[30, 37] |0 | | 12|in MMR(39)|[9, 6, 29] |[30, 37, 38] |0 | | 13|in MMR(15)|[6] |[14] |0 | | 13|in MMR(16)|[6] |[14, 15] |0 | | 13|in MMR(18)|[6] |[14, 17] |0 | | 13|in MMR(19)|[6] |[14, 17, 18] |0 | | 13|in MMR(22)|[6] |[14, 21] |0 | | 13|in MMR(23)|[6] |[14, 21, 22] |0 | | 13|in MMR(25)|[6] |[14, 21, 24] |0 | | 13|in MMR(26)|[6] |[14, 21, 24, 25] |0 | | 13|in MMR(31)|[6, 29] |[30] |0 | | 13|in MMR(32)|[6, 29] |[30, 31] |0 | | 13|in MMR(34)|[6, 29] |[30, 33] |0 | | 13|in MMR(35)|[6, 29] |[30, 33, 34] |0 | | 13|in MMR(38)|[6, 29] |[30, 37] |0 | | 13|in MMR(39)|[6, 29] |[30, 37, 38] |0 | | 14|in MMR(15)|[] |[14] |0 | | 14|in MMR(16)|[] |[14, 15] |0 | | 14|in MMR(18)|[] |[14, 17] |0 | | 14|in MMR(19)|[] |[14, 17, 18] |0 | | 14|in MMR(22)|[] |[14, 21] |0 | | 14|in MMR(23)|[] |[14, 21, 22] |0 | | 14|in MMR(25)|[] |[14, 21, 24] |0 | | 14|in MMR(26)|[] |[14, 21, 24, 25] |0 | | 14|in MMR(31)|[29] |[30] |0 | | 14|in MMR(32)|[29] |[30, 31] |0 | | 14|in MMR(34)|[29] |[30, 33] |0 | | 14|in MMR(35)|[29] |[30, 33, 34] |0 | | 14|in MMR(38)|[29] |[30, 37] |0 | | 14|in MMR(39)|[29] |[30, 37, 38] |0 | | 15|in MMR(16)|[] |[14, 15] |1 | | 15|in MMR(18)|[16] |[14, 17] |1 | | 15|in MMR(19)|[16] |[14, 17, 18] |1 | | 15|in MMR(22)|[16, 20] |[14, 21] |1 | | 15|in MMR(23)|[16, 20] |[14, 21, 22] |1 | | 15|in MMR(25)|[16, 20] |[14, 21, 24] |1 | | 15|in MMR(26)|[16, 20] |[14, 21, 24, 25] |1 | | 15|in MMR(31)|[16, 20, 28, 14] |[30] |0 | | 15|in MMR(32)|[16, 20, 28, 14] |[30, 31] |0 | | 15|in MMR(34)|[16, 20, 28, 14] |[30, 33] |0 | | 15|in MMR(35)|[16, 20, 28, 14] |[30, 33, 34] |0 | | 15|in MMR(38)|[16, 20, 28, 14] |[30, 37] |0 | | 15|in MMR(39)|[16, 20, 28, 14] |[30, 37, 38] |0 | | 16|in MMR(18)|[15] |[14, 17] |1 | | 16|in MMR(19)|[15] |[14, 17, 18] |1 | | 16|in MMR(22)|[15, 20] |[14, 21] |1 | | 16|in MMR(23)|[15, 20] |[14, 21, 22] |1 | | 16|in MMR(25)|[15, 20] |[14, 21, 24] |1 | | 16|in MMR(26)|[15, 20] |[14, 21, 24, 25] |1 | | 16|in MMR(31)|[15, 20, 28, 14] |[30] |0 | | 16|in MMR(32)|[15, 20, 28, 14] |[30, 31] |0 | | 16|in MMR(34)|[15, 20, 28, 14] |[30, 33] |0 | | 16|in MMR(35)|[15, 20, 28, 14] |[30, 33, 34] |0 | | 16|in MMR(38)|[15, 20, 28, 14] |[30, 37] |0 | | 16|in MMR(39)|[15, 20, 28, 14] |[30, 37, 38] |0 | | 17|in MMR(18)|[] |[14, 17] |1 | | 17|in MMR(19)|[] |[14, 17, 18] |1 | | 17|in MMR(22)|[20] |[14, 21] |1 | | 17|in MMR(23)|[20] |[14, 21, 22] |1 | | 17|in MMR(25)|[20] |[14, 21, 24] |1 | | 17|in MMR(26)|[20] |[14, 21, 24, 25] |1 | | 17|in MMR(31)|[20, 28, 14] |[30] |0 | | 17|in MMR(32)|[20, 28, 14] |[30, 31] |0 | | 17|in MMR(34)|[20, 28, 14] |[30, 33] |0 | | 17|in MMR(35)|[20, 28, 14] |[30, 33, 34] |0 | | 17|in MMR(38)|[20, 28, 14] |[30, 37] |0 | | 17|in MMR(39)|[20, 28, 14] |[30, 37, 38] |0 | | 18|in MMR(19)|[] |[14, 17, 18] |2 | | 18|in MMR(22)|[19, 17] |[14, 21] |1 | | 18|in MMR(23)|[19, 17] |[14, 21, 22] |1 | | 18|in MMR(25)|[19, 17] |[14, 21, 24] |1 | | 18|in MMR(26)|[19, 17] |[14, 21, 24, 25] |1 | | 18|in MMR(31)|[19, 17, 28, 14] |[30] |0 | | 18|in MMR(32)|[19, 17, 28, 14] |[30, 31] |0 | | 18|in MMR(34)|[19, 17, 28, 14] |[30, 33] |0 | | 18|in MMR(35)|[19, 17, 28, 14] |[30, 33, 34] |0 | | 18|in MMR(38)|[19, 17, 28, 14] |[30, 37] |0 | | 18|in MMR(39)|[19, 17, 28, 14] |[30, 37, 38] |0 | | 19|in MMR(22)|[18, 17] |[14, 21] |1 | | 19|in MMR(23)|[18, 17] |[14, 21, 22] |1 | | 19|in MMR(25)|[18, 17] |[14, 21, 24] |1 | | 19|in MMR(26)|[18, 17] |[14, 21, 24, 25] |1 | | 19|in MMR(31)|[18, 17, 28, 14] |[30] |0 | | 19|in MMR(32)|[18, 17, 28, 14] |[30, 31] |0 | | 19|in MMR(34)|[18, 17, 28, 14] |[30, 33] |0 | | 19|in MMR(35)|[18, 17, 28, 14] |[30, 33, 34] |0 | | 19|in MMR(38)|[18, 17, 28, 14] |[30, 37] |0 | | 19|in MMR(39)|[18, 17, 28, 14] |[30, 37, 38] |0 | | 20|in MMR(22)|[17] |[14, 21] |1 | | 20|in MMR(23)|[17] |[14, 21, 22] |1 | | 20|in MMR(25)|[17] |[14, 21, 24] |1 | | 20|in MMR(26)|[17] |[14, 21, 24, 25] |1 | | 20|in MMR(31)|[17, 28, 14] |[30] |0 | | 20|in MMR(32)|[17, 28, 14] |[30, 31] |0 | | 20|in MMR(34)|[17, 28, 14] |[30, 33] |0 | | 20|in MMR(35)|[17, 28, 14] |[30, 33, 34] |0 | | 20|in MMR(38)|[17, 28, 14] |[30, 37] |0 | | 20|in MMR(39)|[17, 28, 14] |[30, 37, 38] |0 | | 21|in MMR(22)|[] |[14, 21] |1 | | 21|in MMR(23)|[] |[14, 21, 22] |1 | | 21|in MMR(25)|[] |[14, 21, 24] |1 | | 21|in MMR(26)|[] |[14, 21, 24, 25] |1 | | 21|in MMR(31)|[28, 14] |[30] |0 | | 21|in MMR(32)|[28, 14] |[30, 31] |0 | | 21|in MMR(34)|[28, 14] |[30, 33] |0 | | 21|in MMR(35)|[28, 14] |[30, 33, 34] |0 | | 21|in MMR(38)|[28, 14] |[30, 37] |0 | | 21|in MMR(39)|[28, 14] |[30, 37, 38] |0 | | 22|in MMR(23)|[] |[14, 21, 22] |2 | | 22|in MMR(25)|[23] |[14, 21, 24] |2 | | 22|in MMR(26)|[23] |[14, 21, 24, 25] |2 | | 22|in MMR(31)|[23, 27, 21, 14] |[30] |0 | | 22|in MMR(32)|[23, 27, 21, 14] |[30, 31] |0 | | 22|in MMR(34)|[23, 27, 21, 14] |[30, 33] |0 | | 22|in MMR(35)|[23, 27, 21, 14] |[30, 33, 34] |0 | | 22|in MMR(38)|[23, 27, 21, 14] |[30, 37] |0 | | 22|in MMR(39)|[23, 27, 21, 14] |[30, 37, 38] |0 | | 23|in MMR(25)|[22] |[14, 21, 24] |2 | | 23|in MMR(26)|[22] |[14, 21, 24, 25] |2 | | 23|in MMR(31)|[22, 27, 21, 14] |[30] |0 | | 23|in MMR(32)|[22, 27, 21, 14] |[30, 31] |0 | | 23|in MMR(34)|[22, 27, 21, 14] |[30, 33] |0 | | 23|in MMR(35)|[22, 27, 21, 14] |[30, 33, 34] |0 | | 23|in MMR(38)|[22, 27, 21, 14] |[30, 37] |0 | | 23|in MMR(39)|[22, 27, 21, 14] |[30, 37, 38] |0 | | 24|in MMR(25)|[] |[14, 21, 24] |2 | | 24|in MMR(26)|[] |[14, 21, 24, 25] |2 | | 24|in MMR(31)|[27, 21, 14] |[30] |0 | | 24|in MMR(32)|[27, 21, 14] |[30, 31] |0 | | 24|in MMR(34)|[27, 21, 14] |[30, 33] |0 | | 24|in MMR(35)|[27, 21, 14] |[30, 33, 34] |0 | | 24|in MMR(38)|[27, 21, 14] |[30, 37] |0 | | 24|in MMR(39)|[27, 21, 14] |[30, 37, 38] |0 | | 25|in MMR(26)|[] |[14, 21, 24, 25] |3 | | 25|in MMR(31)|[26, 24, 21, 14] |[30] |0 | | 25|in MMR(32)|[26, 24, 21, 14] |[30, 31] |0 | | 25|in MMR(34)|[26, 24, 21, 14] |[30, 33] |0 | | 25|in MMR(35)|[26, 24, 21, 14] |[30, 33, 34] |0 | | 25|in MMR(38)|[26, 24, 21, 14] |[30, 37] |0 | | 25|in MMR(39)|[26, 24, 21, 14] |[30, 37, 38] |0 | | 26|in MMR(31)|[25, 24, 21, 14] |[30] |0 | | 26|in MMR(32)|[25, 24, 21, 14] |[30, 31] |0 | | 26|in MMR(34)|[25, 24, 21, 14] |[30, 33] |0 | | 26|in MMR(35)|[25, 24, 21, 14] |[30, 33, 34] |0 | | 26|in MMR(38)|[25, 24, 21, 14] |[30, 37] |0 | | 26|in MMR(39)|[25, 24, 21, 14] |[30, 37, 38] |0 | | 27|in MMR(31)|[24, 21, 14] |[30] |0 | | 27|in MMR(32)|[24, 21, 14] |[30, 31] |0 | | 27|in MMR(34)|[24, 21, 14] |[30, 33] |0 | | 27|in MMR(35)|[24, 21, 14] |[30, 33, 34] |0 | | 27|in MMR(38)|[24, 21, 14] |[30, 37] |0 | | 27|in MMR(39)|[24, 21, 14] |[30, 37, 38] |0 | | 28|in MMR(31)|[21, 14] |[30] |0 | | 28|in MMR(32)|[21, 14] |[30, 31] |0 | | 28|in MMR(34)|[21, 14] |[30, 33] |0 | | 28|in MMR(35)|[21, 14] |[30, 33, 34] |0 | | 28|in MMR(38)|[21, 14] |[30, 37] |0 | | 28|in MMR(39)|[21, 14] |[30, 37, 38] |0 | | 29|in MMR(31)|[14] |[30] |0 | | 29|in MMR(32)|[14] |[30, 31] |0 | | 29|in MMR(34)|[14] |[30, 33] |0 | | 29|in MMR(35)|[14] |[30, 33, 34] |0 | | 29|in MMR(38)|[14] |[30, 37] |0 | | 29|in MMR(39)|[14] |[30, 37, 38] |0 | | 30|in MMR(31)|[] |[30] |0 | | 30|in MMR(32)|[] |[30, 31] |0 | | 30|in MMR(34)|[] |[30, 33] |0 | | 30|in MMR(35)|[] |[30, 33, 34] |0 | | 30|in MMR(38)|[] |[30, 37] |0 | | 30|in MMR(39)|[] |[30, 37, 38] |0 | | 31|in MMR(32)|[] |[30, 31] |1 | | 31|in MMR(34)|[32] |[30, 33] |1 | | 31|in MMR(35)|[32] |[30, 33, 34] |1 | | 31|in MMR(38)|[32, 36] |[30, 37] |1 | | 31|in MMR(39)|[32, 36] |[30, 37, 38] |1 | | 32|in MMR(34)|[31] |[30, 33] |1 | | 32|in MMR(35)|[31] |[30, 33, 34] |1 | | 32|in MMR(38)|[31, 36] |[30, 37] |1 | | 32|in MMR(39)|[31, 36] |[30, 37, 38] |1 | | 33|in MMR(34)|[] |[30, 33] |1 | | 33|in MMR(35)|[] |[30, 33, 34] |1 | | 33|in MMR(38)|[36] |[30, 37] |1 | | 33|in MMR(39)|[36] |[30, 37, 38] |1 | | 34|in MMR(35)|[] |[30, 33, 34] |2 | | 34|in MMR(38)|[35, 33] |[30, 37] |1 | | 34|in MMR(39)|[35, 33] |[30, 37, 38] |1 | | 35|in MMR(38)|[34, 33] |[30, 37] |1 | | 35|in MMR(39)|[34, 33] |[30, 37, 38] |1 | | 36|in MMR(38)|[33] |[30, 37] |1 | | 36|in MMR(39)|[33] |[30, 37, 38] |1 | | 37|in MMR(38)|[] |[30, 37] |1 | | 37|in MMR(39)|[] |[30, 37, 38] |1 | | 38|in MMR(39)|[] |[30, 37, 38] |2 |
0 in mmr's 1 - 39 |
---|
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
1 in mmr's 2 - 39 |
---|
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
2 in mmr's 3 - 39 |
---|
ad104051c516812ea5874ca3ff06d0258303623d04307c41ec80a7a18b332ef8 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
3 in mmr's 4 - 39 |
---|
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
4 in mmr's 5 - 39 |
---|
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
5 in mmr's 6 - 39 |
---|
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
6 in mmr's 7 - 39 |
---|
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
827f3213c1de0d4c6277caccc1eeca325e45dfe2c65adce1943774218db61f88 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
7 in mmr's 8 - 39 |
---|
b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
8 in mmr's 9 - 39 |
---|
b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
9 in mmr's 10 - 39 |
---|
b8faf5f748f149b04018491a51334499fd8b6060c42a835f361fa9665562d12d |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
10 in mmr's 11 - 39 |
---|
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
11 in mmr's 12 - 39 |
---|
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
12 in mmr's 13 - 39 |
---|
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
13 in mmr's 14 - 39 |
---|
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
14 in mmr's 15 - 39 |
---|
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
78b2b4162eb2c58b229288bbcb5b7d97c7a1154eed3161905fb0f180eba6f112 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
15 in mmr's 16 - 39 |
---|
f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
16 in mmr's 17 - 39 |
---|
f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
17 in mmr's 18 - 39 |
---|
f4a0db79de0fee128fbe95ecf3509646203909dc447ae911aa29416bf6fcba21 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
18 in mmr's 19 - 39 |
---|
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
19 in mmr's 20 - 39 |
---|
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
20 in mmr's 21 - 39 |
---|
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
21 in mmr's 22 - 39 |
---|
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
61b3ff808934301578c9ed7402e3dd7dfe98b630acdf26d1fd2698a3c4a22710 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
22 in mmr's 23 - 39 |
---|
dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
23 in mmr's 24 - 39 |
---|
dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
24 in mmr's 25 - 39 |
---|
dd7efba5f1824103f1fa820a5c9e6cd90a82cf123d88bd035c7e5da0aba8a9ae |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
25 in mmr's 26 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
26 in mmr's 27 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
27 in mmr's 28 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
28 in mmr's 29 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
29 in mmr's 30 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
30 in mmr's 31 - 39 |
---|
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
d4fb5649422ff2eaf7b1c0b851585a8cfd14fb08ce11addb30075a96309582a7 |
31 in mmr's 32 - 39 |
---|
0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
32 in mmr's 33 - 39 |
---|
0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
33 in mmr's 34 - 39 |
---|
0c9f36783b5929d43c97fe4b170d12137e6950ef1b3a8bd254b15bbacbfdee7f |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
34 in mmr's 35 - 39 |
---|
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
35 in mmr's 36 - 39 |
---|
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
36 in mmr's 37 - 39 |
---|
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
37 in mmr's 38 - 39 |
---|
6a169105dcc487dbbae5747a0fd9b1d33a40320cf91cf9a323579139e7ff72aa |
{:numbered="false"}
TODO acknowledge.