]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Reduce recursion and fix set10 testcase.
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 11 Feb 2020 02:35:09 +0000 (21:35 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 5 Jan 2021 17:28:20 +0000 (12:28 -0500)
1. Remove ma_cp/mas_copy in favour of mas_append and friends.
  It turns out it is cleaner to append nodes together than to try and
  copy parts and glue them together as initially designed.

2. Clean up debug/test code and BUG_ON statements.

3. Add *mte_get_rcu_sanitized() to return NULL if it will be coalesced.

4. mas_set_safe_pivot is no longer recursive.

5. mas_data_end has been altered numerous times.

6. Add mas_get_range() - get the range of a given slot.

7. Drop mas_ma_update_gap/mas_ma_cp in favour of the above mentioned
appending operations.

8. mas_parent_gap() is no longer recursive.

9. mas_update_gap() has been updated to use new mas_parent_gap.

10. mas_split() uses mas_append and friends.

11. __mas_add_slot_cnt() is used to calculate the slots needed when
adding a value - much reliable than mas_data_end for this usecase.

12. mas_rebalance() is no longer recursive.

13. Added validation code for parent slot

14. Doubled testcases and fixed a missing mas_destroy() call.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
include/linux/maple_tree.h
lib/maple_tree.c
lib/test_maple_tree.c

index 0ac4092f8c3ddc001c116f68a76dc680bf523ba3..26f79e1164ce1bb6410bc2d25783d16bb6b21bf4 100644 (file)
@@ -229,26 +229,6 @@ static inline bool mtree_empty(const struct maple_tree *mt)
        return rcu_dereference(mt->ma_root) == NULL;
 }
 
-struct ma_cp {
-       struct maple_enode *src;
-       struct maple_enode *dst;
-       unsigned char src_start;
-       unsigned char src_end;
-       unsigned char dst_start;
-       unsigned char dst_end;
-       unsigned long start_piv;
-};
-#define MA_CP(name, snode, dnode, sstart, send)                         \
-       struct ma_cp name = {                                           \
-               .src = snode,                                           \
-               .dst = dnode,                                           \
-               .src_start = sstart,                                    \
-               .src_end = send,                                        \
-               .dst_start = 0,                                         \
-               .dst_end = MAPLE_RANGE64_SLOTS - 1,                     \
-               .start_piv = 0,                                         \
-       }
-
 /* Advanced API */
 
 struct ma_state {
@@ -404,6 +384,7 @@ static unsigned int tests_run;
 static unsigned int tests_passed;
 
 #ifdef CONFIG_DEBUG_MAPLE_TREE
+void mt_dump(const struct maple_tree *mt);
 #define MT_BUG_ON(tree, x) do {                                        \
        tests_run++;                                            \
        if (x) {                                                \
@@ -416,6 +397,8 @@ static unsigned int tests_passed;
                tests_passed++;                                 \
        }                                                       \
 } while (0)
+#else
+#define MT_BUG_ON(tree, x) BUG_ON(x)
 #endif
 
 #endif /* CONFIG_DEBUG_MAPLE_TREE */
index 12a4373578770441475642faac73e901855f2e2f..a4a6c36e68034bff94f9f79b56062ba8c64a5e6c 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/export.h>
 #include <linux/slab.h>
 #include <asm/barrier.h>
+#include <linux/mm.h> // for task_size
 
 #define MA_ROOT_PARENT 1
 #define ma_parent_ptr(x) ((struct maple_pnode *)(x))
@@ -550,25 +551,6 @@ static inline void mte_set_pivot(struct maple_enode *mn, unsigned char slot,
 {
        return ma_set_pivot(mte_to_node(mn), slot, mte_node_type(mn), val);
 }
-static inline void mas_set_safe_pivot(struct ma_state *mas, unsigned char slot,
-               unsigned long val)
-{
-       enum maple_type type = mte_node_type(mas->node);
-
-       if (slot >= mt_pivots[type]) {
-               unsigned char p_slot;
-               struct maple_enode *me = mas->node;
-
-               if (_ma_is_root(mte_parent(mas->node)))
-                       return;
-
-               p_slot = mte_parent_slot(mas->node);
-               mas_set_safe_pivot(mas, p_slot + 1, val);
-               mas->node = me;
-               return;
-       }
-       mte_set_pivot(mas->node, slot, val);
-}
 static inline struct maple_enode *ma_get_rcu_slot(
                const struct maple_node *mn, unsigned char slot,
                enum maple_type type)
@@ -614,6 +596,16 @@ static inline struct maple_enode *mte_get_rcu_slot(const struct maple_enode *mn,
 {
        return _mte_get_rcu_slot(mn, slot, mte_node_type(mn));
 }
+static inline struct maple_enode *mte_get_rcu_sanitized(
+               const struct maple_enode *mn, unsigned char slot)
+{
+       void *entry = mte_get_rcu_slot(mn, slot);
+
+       if (mt_will_coalesce(entry))
+               return NULL;
+
+       return entry;
+}
 static inline void ma_set_rcu_slot(struct maple_node *mn,
                unsigned char slot, enum maple_type type, void *val)
 {
@@ -880,6 +872,23 @@ no_parent:
        return;
 }
 
+static inline void mas_set_safe_pivot(struct ma_state *mas, unsigned char slot,
+               unsigned long val)
+{
+       MA_STATE(safe_mas, mas->tree, mas->index, mas->last);
+       mas_dup_state(&safe_mas, mas);
+
+restart:
+       if (slot >= mt_pivot_count(safe_mas.node)) {
+               if (mte_is_root(safe_mas.node))
+                       return;
+
+               slot = mte_parent_slot(safe_mas.node);
+               mas_ascend(&safe_mas);
+               goto restart;
+       }
+       mte_set_pivot(safe_mas.node, slot, val);
+}
 /* mas_get_prev_pivot() - Return the previous pivot.
  *
  * Mainly for extracting the previous pivot in the case of slot = 0.
@@ -1137,16 +1146,19 @@ static inline unsigned char mas_data_end(const struct ma_state *mas,
                if (!piv && slot) { // Past the end of data.
                        slot--;
                        piv = prev_piv;
-                       // At this point, we are saying the last slot is the
-                       // end.
-                       if (counted_null) { // if the have ended in a run of NULL
+                       // At this point, we are saying the previous slot is
+                       // the end.
+                       if (counted_null) {
+                               // if this node has ended in a run of NULL
                                if (slot <= counted_null) {
                                        slot = 0;
                                        (*coalesce) = 0;
+                                       piv = mas->min - 1;
                                        break;
                                }
                                (*coalesce) = (*coalesce) - counted_null + 1;
                                slot -= counted_null;
+                               piv = _mas_get_safe_pivot(mas, slot, type);
                        }
                        break;
                }
@@ -1157,7 +1169,7 @@ static inline unsigned char mas_data_end(const struct ma_state *mas,
                                (*coalesce)++;
                        }
                        //counted_null = true;
-               } else if (!entry) {
+               } else if (entry == NULL) {
                        if (counted_null) {
                                (*coalesce)++;
                        }
@@ -1192,36 +1204,158 @@ static inline int ma_hard_data(unsigned long end,
        return end - coalesce;
 }
 
-static inline struct maple_node *mas_switch_nodes(struct ma_state *cp,
-               struct ma_state *left, struct ma_state *right,
-               unsigned long piv)
+static inline unsigned long mas_leaf_max_gap(struct ma_state *mas);
+
+// Set min/max for a given slot in mas->node.
+static inline void mas_get_range(struct ma_state *mas, unsigned char slot,
+               unsigned long *min, unsigned long *max)
 {
-       left->max = piv;
-       right->min = piv + 1;
-       mas_dup_state(cp, right);
-       return mas_mn(right);
+       *min = mas->min;
+       *max = mas_get_safe_pivot(mas, slot);
+       if (!(*max)) {
+               if (slot || mas->min)
+                       *max = mas->max;
+       }
+
+       if (slot)
+               *min = mte_get_pivot(mas->node, slot - 1) + 1;
+
+       if ((*min) == 1) // empty node.
+               *min = mas->min;
 }
+static inline unsigned char mas_append_entry(struct ma_state *mas, void *entry)
+{
+       unsigned long wr_pivot = mas->min ? mas->min - 1 : 0;
+       unsigned char coalesce, dst_slot = mas_get_slot(mas);
+       bool prev_null = false;
+
+       if (!mte_get_rcu_slot(mas->node, 0) && !mte_get_pivot(mas->node, 0))
+               dst_slot = 0; // empty node.
+       else if (dst_slot > mt_slot_count(mas->node))
+               dst_slot = mas_data_end(mas, mte_node_type(mas->node),
+                               &wr_pivot, &coalesce) + 1; // slot not set.
+       else if (dst_slot)  // near-full node append.
+               wr_pivot = mas_get_safe_pivot(mas, dst_slot - 1);
+
+       if (dst_slot && !mte_get_rcu_slot(mas->node, dst_slot - 1))
+               prev_null = true;
 
-static inline void mas_ma_cp_store(struct maple_node *mn,
-               enum maple_type type, unsigned char slot,
-               unsigned long piv, void *entry, bool flush)
+       if (mas->index && mas->index == wr_pivot)
+               dst_slot--;
+       else if (entry && mas->index && mas->index - 1 != wr_pivot) {
+               if (prev_null && dst_slot)
+                       dst_slot--;
+
+               mte_set_rcu_slot(mas->node, dst_slot, NULL);
+               mas_set_safe_pivot(mas, dst_slot++, mas->index - 1);
+       }
+       mte_set_rcu_slot(mas->node, dst_slot, entry);
+       mas_set_safe_pivot(mas, dst_slot, mas->last);
+       mas->max = mas->last;
+
+       return dst_slot;
+}
+static inline unsigned char _mas_append(struct ma_state *mas,
+               struct maple_node *smn, enum maple_type stype,
+               unsigned long src_max,
+               unsigned char src_start, unsigned char src_end)
 {
-       ma_set_rcu_slot(mn, slot, type, entry);
-       if (flush)
-               wmb(); // data needs to exist before pivot for readers
 
-       if (slot < mt_pivots[type])
-               ma_set_pivot(mn, slot, type, piv);
+       unsigned long src_piv;
+       unsigned char src_slot = src_start;
+       unsigned char dst_slot = 0;
+       bool prev_null = false;
+       void *src_data = NULL;
+
+       while (dst_slot < mt_slot_count(mas->node)) {
+               unsigned long this_piv;
+
+               if (dst_slot < mt_pivot_count(mas->node))
+                       this_piv = mte_get_pivot(mas->node, dst_slot);
+               else { // Last slot, no pivot..
+                       if (src_end >= mt_pivots[stype])
+                               this_piv = src_max;
+                       else
+                               this_piv = ma_get_pivot(smn, src_end, stype);
+               }
+
+               src_data = mte_get_rcu_slot(mas->node, dst_slot);
+               if (!src_data) {
+                       if (!this_piv)
+                               break;
+
+                       if (dst_slot == mt_pivot_count(mas->node))
+                               break;
+
+                       prev_null = true;
+               } else
+                       prev_null = false;
+               dst_slot++;
+       }
+
+       src_data = ma_get_rcu_slot(smn, src_start, stype);
+       for (src_slot = src_start; src_slot <= src_end; src_slot++) {
+               bool next_dst = true;
+
+               if (dst_slot >= mt_slot_count(mas->node))
+                       return dst_slot;
+
+               src_data = ma_get_rcu_slot(smn, src_slot, stype);
+               if (src_slot >= mt_pivots[stype])
+                       src_piv = src_max;
+               else
+                       src_piv = ma_get_pivot(smn, src_slot, stype);
+
+               if (!mte_is_leaf(mas->node) && mt_will_coalesce(src_data))
+                       continue;
+
+               if (!src_data || mt_will_coalesce(src_data)) {
+                       src_data = NULL;
+                       if (prev_null && dst_slot) {
+                               mte_set_pivot(mas->node, dst_slot - 1, src_piv);
+                               next_dst = false;
+                               goto update_gap;
+                       }
+
+                       prev_null = true;
+               } else {
+                       prev_null = false;
+               }
+
+               mte_set_rcu_slot(mas->node, dst_slot, src_data);
+               mas_set_safe_pivot(mas, dst_slot, src_piv);
+update_gap:
+               if (!mte_is_leaf(mas->node) && mt_is_alloc(mas->tree))
+                       mte_set_gap(mas->node, dst_slot,
+                                       ma_get_gap(smn, src_slot, stype));
+
+               if (next_dst)
+                       dst_slot++;
+
+               if (mas->max < src_piv)
+                       mas->max = src_piv;
+       }
+
+       return dst_slot;
+}
+static inline unsigned char mas_append(struct ma_state *mas,
+               struct ma_state *src, unsigned char src_start,
+               unsigned char src_end)
+{
+       return _mas_append(mas, mas_mn(src), mte_node_type(src->node),
+                       src->max, src_start, src_end);
 }
 
-static inline unsigned char mas_cp_calc_split(struct ma_state *mas,
-               enum maple_type mas_type, bool append, bool active)
+static inline unsigned char mas_append_calc_split(struct ma_state *mas,
+               bool active)
 {
        unsigned char max = 7, ret = 7;
        unsigned char slot;
        unsigned long range = mas->max - mas->min;
        unsigned long half;
        unsigned long piv = 0;
+       enum maple_type mas_type = mte_node_type(mas->node);
+
        if (mas_type == maple_arange_64)
                max = 5;
 
@@ -1236,13 +1370,13 @@ static inline unsigned char mas_cp_calc_split(struct ma_state *mas,
 
        half = max / 2;
        if (ma_is_leaf(mas_type)) {
-               if (range <= 8)
+               if (range <= 8UL)
                        return ret;
 
                for (slot = 0; slot <= mt_pivots[mas_type]; slot++) {
                        piv = mas_get_safe_pivot(mas, slot);
 
-                       if (!piv)
+                       if (!piv && slot)
                                return ret;
 
                        range = piv - mas->min;
@@ -1260,263 +1394,142 @@ static inline unsigned char mas_cp_calc_split(struct ma_state *mas,
        return half;
 
 done:
-       if (ret < max && (append || piv == ULONG_MAX))
+       if (ret < max && (piv == ULONG_MAX))
                ret++;
 
        return ret;
 }
-static inline unsigned long mas_leaf_max_gap(struct ma_state *mas);
-static inline void mas_ma_update_gap(struct ma_state *mas,
-               enum maple_type mas_type, struct maple_node *mn,
-               enum maple_type  mn_type, unsigned long piv,
-               unsigned long written_piv, unsigned char src_slot,
-               unsigned char slot, unsigned long *max_gap, void *loop_entry)
-{
-       unsigned long gap = piv - written_piv;
-
-       if (!ma_is_leaf(mn_type)) {// non-leaf have gaps already.
-               gap = ma_get_gap(mas_mn(mas), src_slot, mas_type);
-               ma_set_gap(mn, slot, mn_type, gap);
-       } else if (loop_entry) // zero gap in leaf.
-               return;
-
-       if (gap > (*max_gap))
-               (*max_gap) = gap;
-}
-
-/*
- * Private
- *
- * mas_ma_cp() - copy mas->node to mn (or left->node and right->node for
- * splits).
- *
- * @mas - src
- * @p_slot - parent slot - used to update gaps on split.
- * @left - destination 1 mas
- * @right - destination 2 mas - if not null, treat this as a split call.
- * @mn - destination 1 node - if null, taken from @left->node - exists for
- * inactive (unallocated) nodes.
- * @mn_type - destination 1 node type - same as @mn, taken from @left->node.
- * @entry - entry to insert at mas.index/mas.last
- * @dst_start- destination start slot.  If non-zero, implies append mode.
- *
- * Trying to calculate a split is a rather difficult task.  One has to
- * remember:
- * 1. Keep gaps at the end of a node - might not be done right now?
- * 2. Coalescing may affect the middle position of data
- * 3. Use the target slot and the new count to better get a 50/50 split.
- *
- */
-static inline unsigned char mas_ma_cp(struct ma_state *mas,
-               unsigned char p_slot, struct ma_state *left,
-               struct ma_state *right, struct maple_node *mn,
-               enum maple_type mn_type, unsigned long mn_min,
-               int entry_cnt, void *entry, unsigned char dst_start,
-               bool active)
+static inline unsigned char mas_skip_overwritten(struct ma_state *mas,
+               unsigned char data_end, unsigned char slot)
 {
-       enum maple_type mas_type = mte_node_type(mas->node);
-       struct maple_node *parent = mte_to_node(mas->node);
-       unsigned char ret = 0;
-       unsigned char split = mt_slots[mas_type] / 2;
-       unsigned char src_slot = 0, slot = 0;
-       unsigned long prev_piv = mas->min, written_piv = mas->min - 1;
-       unsigned long max_gap = 0;
-       bool attempt_insert = false;
-       bool appending = false;
-       bool append = false;
-       void *existing = NULL;
-       bool null_run = false;
-       bool prev_null = false;
-       bool update_gaps = mt_is_alloc(mas->tree);
-       unsigned long piv[3] = {
-               mas->index - 1,
-               mas->last,
-               mas->min,
-       };
+       unsigned char ret = slot;
 
+       while ((data_end >= ret) &&
+             (mas_get_safe_pivot(mas, ret) <= mas->last))
+               ret++;
 
-       MA_STATE(cp, mas->tree, mas->index, mas->last);
+       return ret;
+}
+static void mas_split_may_switch_dst(struct ma_state **dst_mas,
+               struct ma_state *right, unsigned char *dst_slot)
+{
+       struct ma_state *dst = *dst_mas;
 
-       if (dst_start)
-               append = true;
+       if (dst == right)
+               return;
 
-       if (ma_is_leaf(mas_type))
-               attempt_insert = true;
+       if (*dst_slot >= mt_slot_count(dst->node)) {
+               right->min = dst->max + 1;
+               *dst_mas = right;
+               *dst_slot = 0;
+       }
+}
 
-       if (right)
-               split = mas_cp_calc_split(mas, mas_type, append, active);
+static void mas_append_split_data(struct ma_state *left,
+               struct ma_state *right, struct ma_state *src,
+               unsigned char split, unsigned char start, unsigned char end,
+               unsigned char slot, void *entry)
+{
+       void *existing_entry = mte_get_rcu_sanitized(src->node, slot);
+       struct ma_state *dst = left;
+       unsigned char dst_slot = slot;
+       unsigned long slot_min, slot_max;
 
-       if (left) {
-               mas_dup_state(&cp, left);
+       mas_get_range(src, slot, &slot_min, &slot_max);
+       if (!left) {
+               dst = right;
+               dst_slot = slot - split - 1;
+               if (mte_get_pivot(dst->node, dst_slot))
+                       dst_slot++;
        }
 
-       if (!mn) {
-               mn = mas_mn(&cp);
-               mn_type = mte_node_type(cp.node);
-               p_slot = mte_parent_slot(left->node);
-               parent = mte_parent(left->node);
-               mas_type = mas_parent_enum(left, left->node);
+       if (dst_slot != 0) {
+               mas_append(dst, src, start, slot - 1);
+               dst->max = mte_get_pivot(dst->node, slot - 1);
        }
 
-       if (!entry_cnt)
-               piv[2] = mas->max;
-
-       if (append) { // start at a given slot, so append there.
-               mas_dup_state(&cp, mas);
-               src_slot = entry_cnt;
-               slot = dst_start;
-               if (mn == mas_mn(&cp)) // src and dst are the same.
-                       slot = entry_cnt;
 
-               existing = ma_get_rcu_slot(mn, slot, mn_type);
-               written_piv = mn_min;
-               if (slot)
-                       written_piv = ma_get_pivot(mn, slot, mn_type);
+       if (slot_min == src->index) {
+               mas_set_safe_pivot(dst, dst_slot, dst->last);
+               mte_set_rcu_slot(dst->node, dst_slot++, entry);
+               dst->max = dst->last;
+       } else {
+               mas_set_safe_pivot(dst, dst_slot, dst->index - 1);
+               mte_set_rcu_slot(dst->node, dst_slot++, existing_entry);
+               dst->max = dst->index - 1;
+               mas_split_may_switch_dst(&dst, right, &dst_slot);
+               mas_set_safe_pivot(dst, dst_slot, dst->last);
+               mte_set_rcu_slot(dst->node, dst_slot++, entry);
+               dst->max = dst->last;
+       }
+
+       // Check if it's time to switch.
+       mas_split_may_switch_dst(&dst, right, &dst_slot);
+       // Skip anything overwritten by this add
+       slot = mas_skip_overwritten(src, end, slot);
+       if (slot >= mt_slot_count(src->node))
+               goto done;
 
-               if (mn == mas_mn(&cp)) { // src and dst are the same.
-                       if (existing || (!slot && written_piv < cp.index)) {
-                               src_slot++;
-                               slot++;
-                               existing = NULL;
-                       }
-                       entry_cnt = 0;
-               } else if (existing && written_piv != cp.index) {
-                       slot++;
-                       entry_cnt = -1;
-               } else {
-                       src_slot++;
-                       entry_cnt = 0;
-               }
+       mas_get_range(src, slot, &slot_min, &slot_max);
+       existing_entry = mte_get_rcu_sanitized(src->node, slot);
 
-               appending = true;
-               prev_piv = written_piv;
-               attempt_insert = true;
-               if (mt_is_alloc(mas->tree))
-                       max_gap = mas_leaf_max_gap(mas);
+       if (slot_min <= src->last && slot_max > src->last) {
+               mte_set_rcu_slot(dst->node, dst_slot, existing_entry);
+               mas_set_safe_pivot(dst, dst_slot++, slot_max);
+               dst->max = slot_max;
+               slot++;
        }
 
-       do {
-               int i = 2; // Default to just writing the pivot.
-               int j = 3; // Loop limit.
-
-               if (entry_cnt < 0) {
-                       appending = true;
-                       existing = NULL;
-                       piv[2] = mas->max;
-               } else {
-                       piv[2] = mas_get_safe_pivot(mas, src_slot);
-                       if (!piv[2] && src_slot)
-                               piv[2] = mas->max;
-                       existing = mte_get_rcu_slot(mas->node, src_slot);
-               }
-
-               if (!appending) {
-                       if (mt_will_coalesce(existing)) {
-                               if (prev_null && piv[2] < cp.index) {
-                                       if (slot &&
-                                           slot - 1 < mt_pivots[mas_type]) {
-                                               ma_set_pivot(mn, slot - 1,
-                                                            mas_type, piv[2]);
-                                               written_piv = piv[2];
-                                       }
-                                       if (update_gaps && entry_cnt >= 0) {
-                                               mas_ma_update_gap(mas, mas_type,
-                                                       mn, mn_type, piv[2],
-                                                       written_piv, src_slot,
-                                                       slot, &max_gap, NULL);
-                                       }
-                               }
-                               goto skip_src_slot;
-                       }
-
-                       if (src_slot && piv[2] == prev_piv) {
-                               goto skip_src_slot;
-                       }
-
-                       if (src_slot && written_piv >= piv[2]) // overwritten
-                               goto skip_src_slot;
-               }
-
-               if ((append || (attempt_insert && cp.index <= piv[2]))) {
-                       i = 0;
-                       if (written_piv == cp.index - 1) {
-                               i = 1; // previous pivot matches exactly.
-                       } else if (!src_slot && written_piv == cp.index)
-                               i = 1;
-
-                       if (appending)
-                               j--;
-                       else if (!appending && (piv[2] <= cp.last))
-                               j--; // skip last pivot.
-                       attempt_insert = false;
-               }
-
-
-               for (; i < j; i++) {
-                       void *loop_entry = existing;
-                       bool wmb = false;
-
-                       if (i == 1)
-                               loop_entry = entry;
-
-                       if (append)
-                               wmb = true;
-
-                       if (mt_is_empty(loop_entry) ||
-                                       xa_is_retry(loop_entry)) {
-                               if (null_run)
-                                       slot--;
-
-                               null_run = true;
-                       } else {
-                               null_run = false;
-                       }
-
-                       mas_ma_cp_store(mn, mn_type, slot, piv[i],
-                                       loop_entry, wmb);
-
-                       if (update_gaps) {
-                               mas_ma_update_gap(mas, mas_type, mn, mn_type,
-                                               piv[i], written_piv, src_slot,
-                                               slot, &max_gap, loop_entry);
-                       }
+       mas_split_may_switch_dst(&dst, right, &dst_slot);
 
-                       if (!loop_entry)
-                               prev_null = true;
-                       else
-                               prev_null = false;
+       if (slot <= end && dst->max < src->max) {
+               mas_append(dst, src, slot, end);
+               dst->max = mas_get_safe_pivot(src, end);
+       }
+done:
+       if (left == dst)
+               right->min = dst->max + 1;
+}
 
-                       written_piv = piv[i];
-                       slot++;
-                       // If this is a split operation, right will exist
-                       // and the target may need to be switched.
-                       if ((right) && (cp.node != right->node) &&
-                                       (slot > split)) {
-                               ret = slot;
-                               if (update_gaps)
-                                       parent->ma64.gap[p_slot] = max_gap;
-
-                               mn = mas_switch_nodes(&cp, left, right,
-                                               piv[i]);
-                               slot = 0;
-                               max_gap = 0;
-                               p_slot++;
-                       }
-               }
 
-               prev_piv = piv[2];
-skip_src_slot:
-               src_slot++;
-       } while ((entry_cnt-- > 0) || attempt_insert);
+static inline unsigned char mas_append_split(struct ma_state *dst1,
+               struct ma_state *dst2, struct ma_state *src,
+               unsigned char slot, void *entry, bool active)
+{
+       unsigned char split = mas_append_calc_split(src, active);
+       unsigned long wr_pivot;
+       unsigned char coalesce;
+       unsigned char data_end = mas_data_end(src, mte_node_type(src->node),
+                       &wr_pivot, &coalesce);
+       bool add_entry = mte_is_leaf(src->node);
+
+       mas_set_slot(dst1, slot);
+       dst1->max = mas_get_safe_pivot(src, split);
+       dst2->min = dst1->max + 1;
+       if (!add_entry)
+               goto not_a_leaf;
+
+       if (slot <= split) { // going into the left one, at least a little.
+               mas_append_split_data(dst1, dst2, src, split, 0,
+                               split, slot, entry);
+               mas_append(dst2, src, split + 1, data_end);
+       } else { // going into the right.
+               mas_append(dst1, src, 0, split);
+               mas_append_split_data(NULL, dst2, src, split, split + 1,
+                               data_end, slot, entry);
+       }
 
-       if (right && update_gaps && p_slot < mt_slots[mas_type])
-               parent->ma64.gap[p_slot] = max_gap;
-       else if (!right)
-               ret = slot - 1;
+       return split;
 
-       return ret;
+not_a_leaf:
+       mas_append(dst1, src, 0, split);
+       if (split != data_end)
+               split++;
+       mas_append(dst2, src, split, data_end);
+       return split;
 }
 
+
 static inline unsigned char mas_dense_calc_split(struct ma_state *mas,
                struct maple_enode **left, struct maple_enode **right)
 {
@@ -1591,41 +1604,6 @@ even_split:
 
        return i > 2 ? i : half - 1;
 }
-static inline void mas_dense_cp(struct ma_state *mas, struct ma_cp *cp)
-{
-       unsigned char sloc = cp->src_start; // src location
-       unsigned char pivot_cnt = mt_pivot_count(cp->src);
-       unsigned long min, piv;
-       void *ptr;
-
-       if (!sloc)
-               min = mas->min;
-       else
-               min = mte_get_pivot(cp->src, sloc - 1) + 1;
-
-       piv = min;
-       while (sloc <= cp->src_end) {
-               unsigned long end;
-               unsigned char slot, end_slot;
-
-               ptr = mte_get_rcu_slot(cp->src, sloc);
-               if (sloc < pivot_cnt) {
-                       end = mte_get_pivot(cp->src, sloc);
-               } else {
-                       if (!ptr)
-                               break;
-                       end = mas->max;
-               }
-
-               slot = piv - min;
-               end_slot = end - min;
-               for (; slot <= end_slot; slot++)
-                       mte_set_rcu_slot(cp->dst, slot, ptr);
-
-               piv = end + 1;
-               sloc++;
-       }
-}
 
 static inline unsigned long mas_leaf_max_gap(struct ma_state *mas)
 {
@@ -1634,10 +1612,12 @@ static inline unsigned long mas_leaf_max_gap(struct ma_state *mas)
        unsigned long gap = 0;
        unsigned long pstart, pend;
        int i;
+       void *entry = NULL;
 
        if (ma_is_dense(mt)) {
                for (i = 0; i < mt_slot_count(mas->node); i++) {
-                       if (!mt_is_empty(mte_get_rcu_slot(mas->node, i))) {
+                       entry = mte_get_rcu_slot(mas->node, i);
+                       if (!mt_is_empty(entry) || xa_is_retry(entry)) {
                                if (gap > max_gap)
                                        max_gap = gap;
                                gap = 0;
@@ -1655,9 +1635,11 @@ static inline unsigned long mas_leaf_max_gap(struct ma_state *mas)
                pend = mas_get_safe_pivot(mas, i);
                if (!pend && i)
                        pend = mas->max;
+
                gap = pend - pstart + 1;
+               entry = mte_get_rcu_slot(mas->node, i);
 
-               if (!mt_is_empty(mte_get_rcu_slot(mas->node, i)))
+               if (!mt_is_empty(entry) || xa_is_retry(entry))
                        goto next;
 
                if (gap > max_gap)
@@ -1692,54 +1674,58 @@ static inline unsigned long mas_max_gap(struct ma_state *mas,
        return max_gap;
 }
 static inline void mas_parent_gap(struct ma_state *mas, unsigned char slot,
-               unsigned long new)
+               unsigned long new, bool force)
 {
-       unsigned long max_gap = 0;
        unsigned char max_slot = 0;
+       unsigned long old_max_gap;
 
-       mas_ascend(mas);
-       mte_set_gap(mas->node, slot, new);
+       /* Don't mess with mas state, use a new state */
+       MA_STATE(gaps, mas->tree, mas->index, mas->last);
+       mas_dup_state(&gaps, mas);
 
-       if (mte_is_root(mas->node))
+ascend:
+       /* Go to the parent node. */
+       mas_ascend(&gaps);
+       old_max_gap = mas_max_gap(&gaps, &max_slot);
+       mte_set_gap(gaps.node, slot, new);
+       new = mas_max_gap(&gaps, &slot);
+
+       if (!force && new == old_max_gap)
                return;
 
-       max_gap = mas_max_gap(mas, &max_slot);
+       if (mte_is_root(gaps.node))
+               return;
 
-       if (slot == max_slot || max_gap < new)
-               mas_parent_gap(mas, mte_parent_slot(mas->node), new);
+       slot = mte_parent_slot(gaps.node);
+       goto ascend;
 }
 /* Private
+ *
+ * mas_update_gap() - Update a nodes gaps and propagate up if necessary or
+ * force by setting @force to true.
  */
-static inline void mas_update_gap(struct ma_state *mas)
+static inline void mas_update_gap(struct ma_state *mas, bool force)
 {
        unsigned char pslot;
        unsigned long p_gap, max_gap = 0;
-       unsigned long max, min;
-       struct maple_enode *mn;
-
-       if (!mte_is_leaf(mas->node))
-               return;
+       unsigned char slot = 0;
 
+       /* Get the largest gap in mas->node */
        if (mte_is_root(mas->node))
                return;
 
-       mn = mas->node;
-       max = mas->max;
-       min = mas->min;
-       /* Get the largest gap in this leaf and check it against the reported
-        * largest.
-        */
-       max_gap = mas_leaf_max_gap(mas);
+       if (mte_is_leaf(mas->node))
+               max_gap = mas_leaf_max_gap(mas);
+       else
+               max_gap = mas_max_gap(mas, &slot);
+
+       /* Get the gap reported in the parent */
        pslot = mte_parent_slot(mas->node);
        p_gap = ma_get_gap(mte_parent(mas->node), pslot,
                        mas_parent_enum(mas, mas->node));
 
-       if (p_gap != max_gap)
-               mas_parent_gap(mas, pslot, max_gap);
-
-       mas->max = max;
-       mas->min = min;
-       mas->node = mn;
+       if (force || p_gap != max_gap)
+               mas_parent_gap(mas, pslot, max_gap, force);
 }
 
 
@@ -1838,7 +1824,7 @@ void mte_destroy_walk(struct maple_enode *mn)
        case maple_arange_64:
                for (i = 0; i < slot_cnt; i++) {
                        node = mte_get_rcu_slot(mn, i);
-                       if (!mt_is_empty(node))
+                       if (!mt_is_empty(node) && !xa_is_retry(node))
                                mte_destroy_walk(node);
                }
                break;
@@ -1849,105 +1835,6 @@ void mte_destroy_walk(struct maple_enode *mn)
 
 }
 
-static inline unsigned long _mas_copy(struct ma_state *mas, struct ma_cp *cp,
-               unsigned long min)
-{
-       unsigned char sloc = cp->src_start; // src location
-       unsigned char dloc = cp->dst_start; // dst location
-       enum maple_type type = mte_node_type(cp->src);
-       enum maple_type dtype;
-       unsigned char pivot_cnt = mt_pivots[type];
-       unsigned long piv, prev_piv = min;
-
-       if (!cp->dst) {
-               /* Allocate a new node */
-
-               mas_node_cnt(mas, 1);
-               if (mas_is_err(mas))
-                       return prev_piv;
-               cp->dst = mt_mk_node(mas_next_alloc(mas), type);
-       }
-
-       if (!mt_pivot_count(cp->dst)) {
-               mas_dense_cp(mas, cp);
-               return prev_piv;
-       }
-       dtype = mte_node_type(cp->dst);
-
-       while (sloc <= cp->src_end &&
-                       dloc <= cp->dst_end) {
-               void *entry;
-
-               if (prev_piv >= mas->max)
-                       break;
-
-               if (sloc < pivot_cnt)
-                       piv = mte_get_pivot(cp->src, sloc);
-               else
-                       piv = mas->max;
-
-               if (sloc && !piv)
-                       break;
-               
-               entry = mte_get_rcu_slot(cp->src, sloc);
-               if (mt_will_coalesce(entry)) {
-                       if (!sloc) {
-                               entry = NULL;
-                               if (dloc) {
-                                       void *p_entry =
-                                               mte_get_rcu_slot(cp->dst,
-                                                                dloc - 1);
-                                       if (!p_entry) {
-                                               mte_set_pivot(cp->dst, dloc - 1,
-                                                               piv);
-                                               goto next_src_slot;
-                                       }
-                               }
-                               else
-                                       goto next_src_slot;
-                       }
-                       else
-                               goto next_src_slot;
-               }
-
-
-               // Last entry.
-               if (dloc && (piv == mas->max || !piv)) {
-                       if (!mte_get_rcu_slot(cp->dst, dloc -1) &&
-                           mt_is_empty(entry)) {
-                               mte_set_pivot(cp->dst, dloc -1, 0);
-                               break;
-                       }
-               }
-
-               if (piv < cp->start_piv)
-                       goto next_src_slot;
-
-               if (sloc && piv == prev_piv)
-                       goto next_src_slot;
-
-               if (dloc < pivot_cnt)
-                       mte_set_pivot(cp->dst, dloc, piv);
-
-               if (dtype == maple_arange_64)
-                       mte_cp_gap(cp->dst, dloc, cp->src, sloc);
-
-               mte_cp_rcu_slot(cp->dst, dloc++, cp->src, sloc);
-               prev_piv = piv;
-next_src_slot:
-               sloc++;
-       }
-
-       cp->dst_start = dloc;
-       cp->src_start = sloc;
-       return prev_piv;
-}
-
-static inline unsigned long mas_copy(struct ma_state *mas, struct ma_cp *cp)
-{
-       return _mas_copy(mas, cp, mas->min);
-}
-
 static inline void mte_adopt_children(struct maple_enode *parent)
 {
 
@@ -2018,26 +1905,6 @@ static inline void mas_replace(struct ma_state *mas)
        _mas_replace(mas, true, false);
 }
 
-/* Private
- *
- * This copies from the start to the specified end of a node into a new node.
- * Returns a pointer to the node, encoded node is in mas->node.
- * Note: mas->node is overwritten.
- *       This isn't safe to use to copy the last slot as it doesn't check the
- *       pivot.
- */
-static inline void mas_partial_copy(struct ma_state *mas,
-                                              unsigned char end)
-{
-       MA_CP(cp, mas->node, NULL, 0, end);
-       mas_copy(mas, &cp);
-       if (mas_is_err(mas))
-               return;
-
-       mte_to_node(cp.dst)->parent = mte_to_node(cp.src)->parent;
-       mas->node = cp.dst;
-}
-
 static inline void mas_gap_link(struct ma_state *mas, struct maple_enode *parent,
                unsigned char slot, unsigned long pivot)
 {
@@ -2102,18 +1969,20 @@ static inline int mas_split(struct ma_state *mas, unsigned char slot,
                bool active, unsigned entry_cnt, void *entry)
 {
        struct maple_enode *full = mas->node;
-       unsigned char split, p_slot = 0, p_end = 0;
-       struct maple_enode *old_parent, *new_parent;
+       unsigned char split, p_slot = 0, p_end = 0, link = 0;
+       struct maple_enode *old_parent;
        enum maple_type ptype; // parent type.
        enum maple_type type; // split type.
 
        MA_STATE(parent, mas->tree, mas->index, mas->last);
        MA_STATE(left, mas->tree, mas->index, mas->last);
        MA_STATE(right , mas->tree, mas->index, mas->last);
+       MA_STATE(new_p_mas, mas->tree, mas->index, mas->last);
 
        type = mte_node_type(mas->node);
        if (mte_is_root(mas->node)) {
                old_parent = full;
+               mas_dup_state(&parent, mas);
                if (mt_is_alloc(mas->tree))
                        ptype = maple_arange_64;
                else
@@ -2156,74 +2025,52 @@ static inline int mas_split(struct ma_state *mas, unsigned char slot,
                return 0;
 
        // Allocations.
-       new_parent = mt_mk_node(mas_next_alloc(mas), ptype);
+       mas_dup_state(&new_p_mas, &parent);
+       new_p_mas.node = mt_mk_node(mas_next_alloc(mas), ptype);
+
+       // Copy grand parent to the parent, including slot encoding.
+       mas_mn(&new_p_mas)->parent = mas_mn(&parent)->parent;
 
        mas_dup_state(&left, mas);
        mas_dup_state(&right, mas);
        left.node = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)), type);
        right.node  = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)), type);
 
-       mte_set_parent(left.node, new_parent, p_slot);
-       mte_set_parent(right.node, new_parent, p_slot+1);
+       mte_set_parent(left.node, new_p_mas.node, p_slot);
+       mte_set_parent(right.node, new_p_mas.node, p_slot+1);
        // split the data into left & right and do the insert.
-       split = mas_ma_cp(mas, p_slot, &left, &right, NULL, type, 0, entry_cnt,
-                       entry, 0, active);
-
-       // Copy the parents information
-       if (!mte_is_root(full)) {
-               unsigned char skip = 1;
+       split = mas_append_split(&left, &right, mas, slot, entry, active);
 
-               MA_CP(cp, old_parent, new_parent, 0, p_slot - 1);
+       // Copy the parent data up to p_slot - 1.
+       if (!mte_is_root(full) && p_slot)
+               link = mas_append(&new_p_mas, &parent, 0, p_slot - 1);
 
-               // Copy the parent data up to p_slot - 1.
-               if (p_slot)
-                       mas_copy(&parent, &cp);
-
-               if (right.node)
-                       skip++;
-
-               // Copy from p_slot + skip to the end.
-               if (p_slot < mt_slots[ptype] - 2) {
-                       cp.src_start = p_slot + 1;
-                       cp.src_end = p_end;
-                       cp.dst_start += skip;
-                       _mas_copy(&parent, &cp, right.max);
-               }
-       }
        right.max = mas->max;
-       // left will be placed in p_slot
-       mte_link(left.node, new_parent, p_slot, left.max, ptype);
+       // left will be placed in link, not p_slot as coalescing may occur.
+       mte_link(left.node, new_p_mas.node, link, left.max, ptype);
 
-       // right (if it exists, will be placed in p_slot + 1;
+       // right (if it exists, will be placed in link + 1;
        if (right.node)
-               mte_link(right.node, new_parent, p_slot + 1,
+               mte_link(right.node, new_p_mas.node, link + 1,
                        right.max, ptype);
 
-       // Copy grand parent to the parent, including slot encoding.
-       mte_to_node(new_parent)->parent = mte_to_node(old_parent)->parent;
+       // Append data from p_slot + 1 to the end.
+       if (!mte_is_root(full) && (p_slot + 1 <= p_end))
+               mas_append(&new_p_mas, &parent, p_slot + 1, p_end);
+
        // Update encoded slots in children
-       mte_adopt_children(new_parent);
-       // Set up maple state to replace the parent node in the grandparent.
-       parent.node = new_parent;
+       mte_adopt_children(new_p_mas.node);
 
-       mas_dup_state(mas, &parent);
+       mas_dup_state(mas, &new_p_mas);
        // Replace the parent node & free the old parent.
        _mas_replace(mas, active, true);
+       mas_dup_state(mas, &new_p_mas);
 
-       if (mt_is_alloc(mas->tree) && !mte_is_root(mas->node)) {
-               unsigned char gap_slot = 0;
-               unsigned long max_gap = mas_max_gap(mas, &gap_slot);
-               gap_slot = mte_parent_slot(mas->node);
-               mas_parent_gap(mas, gap_slot, max_gap);
-       }
-
-       mas_dup_state(mas, &parent);
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, false);
 
        // Set up the ma_state for the return.  Point to the correct node for
        // the insert or subsequent split.
-//     if (!mt_is_alloc(mas->tree)) // FIXME: Something to do with leaf size
-//             p_slot = slot - p_slot;
-
        if (mas->index <= left.max) {
                mas_dup_state(mas, &left);
                p_slot += 1;
@@ -2240,7 +2087,11 @@ static inline int mas_split(struct ma_state *mas, unsigned char slot,
                        mte_free(full);
        }
 
-       //mt_dump(mas->tree);
+       if (mt_is_alloc(mas->tree)) {
+               mas_update_gap(&left, false);
+               mas_update_gap(&right, false);
+       }
+
        return split;
 }
 
@@ -2310,113 +2161,301 @@ static inline int _mas_add_dense(struct ma_state *mas, void *entry,
 }
 
 
-// Set min/max for a given slot in mas->node.
-static inline void _mas_get_range(struct ma_state *mas, unsigned char slot,
-               unsigned long *min, unsigned long *max)
+static inline int __mas_add_slot_cnt(struct ma_state *mas,
+               unsigned long prev_piv, unsigned char this_slot,
+               const unsigned char slot, bool prev_null, bool start)
 {
-       *min = mas->min;
-       *max = mas_get_safe_pivot(mas, slot);
-       if (!(*max))
-               *max = mas->max;
+       unsigned long this_piv = mas->min;
+       int slot_cnt = 0;
+       void *data;
 
-       if (slot)
-               *min = mte_get_pivot(mas->node, slot - 1) + 1;
+       while (this_slot < slot) {
+               this_piv = mas_get_safe_pivot(mas, this_slot);
+               if (!this_piv && this_slot)
+                       break;
 
-       if ((*min) == 1) // empty node.
-               *min = mas->min;
+               if (this_piv == prev_piv && this_slot)
+                       goto skip_slot;
+
+               if (this_piv < prev_piv)
+                       goto skip_slot;
+
+               data = mte_get_rcu_slot(mas->node, this_slot);
+               if (!data || mt_will_coalesce(data)) {
+                       if (prev_null)
+                               goto skip_slot;
+
+                       prev_null = true;
+               } else
+                       prev_null = false;
+
+               slot_cnt++;
+skip_slot:
+               prev_piv = this_piv;
+               this_slot++;
+       }
+
+       if (start)
+               return slot_cnt;
+
+       if (prev_null != true && this_piv != mas->max)
+               slot_cnt++;
+
+       return slot_cnt;
 }
 
 static inline int _mas_add_slot_cnt(struct ma_state *mas,
                const unsigned char slot, const unsigned long min,
                const unsigned long max)
 {
-       unsigned char end, coalesce;
-       unsigned long last_piv;
-       void *last_entry;
-       int req_slots = 0;
-
-       end = mas_data_end(mas, mte_node_type(mas->node), &last_piv, &coalesce);
+       int slot_cnt;
+       unsigned char slot_max = mt_slot_count(mas->node);
+       bool prev_null = !!mte_get_rcu_slot(mas->node, slot);
+       unsigned long prev_piv = (mas->min ? mas->min - 1 : mas->min);
 
-       if (max == mas->max && min == mas->min)
-               return end - coalesce;  // overwriting a single entry.
+       slot_cnt = __mas_add_slot_cnt(mas, prev_piv, 0, slot, false, true);
+       slot_cnt++; // maintains the same slot (this_slot) (1)
+       if (min < mas->index) // starts after this_slot.
+               slot_cnt++; // (2?)
 
-       if (min < mas->index)
-               req_slots++;  //slot needed at start.
-
-       if (max > mas->last) {
-               req_slots++; // slot needed at end.
+       if (max > mas->last) { // ends before this_slot.
+               slot_cnt++; // (2 or 3?)
+               prev_piv = max;
        } else {
-               // walk back through the slots until we get to the insert
-               // slot checking where we fit.
-               unsigned char end_slot = end;
-               while (end_slot > slot) {
-                       unsigned long piv = mas_get_safe_pivot(mas, end_slot);
-                       if (mas->last < piv)
-                               req_slots++;
-                       if (mas->last <= piv)
-                               break;
-                       end_slot--;
-               }
+               prev_null = false;
+               prev_piv = mas->last;
        }
 
-       if (mte_is_dense(mas->node))
-               return req_slots;
-
-       do {
-               last_entry = mte_get_rcu_slot(mas->node, end);
-       } while (mt_will_coalesce(last_entry) && --end);
+       if (max == mas->max)
+               return slot_cnt;
 
-       req_slots = req_slots + end - coalesce;
-       // Check if it's safe to use the slot without a pivot.
-       // max of the slot == max of the node.
-       // max of the tree is being set.
-       if ((mas->last == mas->max && mas->max != ULONG_MAX) ||
-           (mas->max == ULONG_MAX && mas->last == ULONG_MAX))
-               return req_slots;
 
-       if (!last_entry) // nothing at the last slot.
-               return req_slots;
+       slot_cnt += __mas_add_slot_cnt(mas, prev_piv, slot + 1, slot_max,
+                                      prev_null, false);
 
-       return req_slots + 1;
+       return slot_cnt;
 }
+
 static inline int __mas_add(struct ma_state *mas, void *entry,
                int entry_cnt, bool active, bool append)
 {
        enum maple_type mas_type = mte_node_type(mas->node);
        struct maple_node space;
        struct maple_node* mn = NULL;
-       unsigned long mn_min = mas->min;
+       unsigned long wr_pivot = mas->min - 1;
+       unsigned char coalesce;
+       unsigned char data_end = mas_data_end(mas, mas_type, &wr_pivot,
+                                             &coalesce);
        int ret = 0;
 
-       MA_STATE(cp, mas->tree, mas->index, mas->last);
 
        if (append) {
-               mn = mas_mn(mas); // Appending means writing to the source.
-       } else if (active) {
-               cp.node = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)),
-                               mas_type);
-               mn = mas_mn(&cp);
+               mas_set_slot(mas, data_end + 1);
+               mas_append_entry(mas, entry);
        } else {
-               memset(&space, 0, sizeof(struct maple_node));
-               mn = &space;
-               cp.node = NULL;
-       }
+               MA_STATE(cp, mas->tree, mas->index, mas->last);
+               mas_dup_state(&cp, mas);
 
-       ret = mas_ma_cp(mas, 0, &cp, NULL, mn, mas_type, mn_min, entry_cnt, entry,
-                       append ? entry_cnt : 0, active);
+               unsigned char slot = mas_get_slot(mas);
+               unsigned char end_slot = slot;
+               unsigned long src_max = mas->max;
+               unsigned long piv, prev_piv = mas->min - 1;
+               void *existing_entry = NULL;
 
-       mn->parent = mas_mn(mas)->parent;
-       // FIXME: Propagate gaps.
+               if (slot)
+                       prev_piv = mte_get_pivot(mas->node, slot - 1);
 
-       if (append)
-               return ret;
-       if (active)
-               mas->node = cp.node;
-       else
-               memcpy(mas_mn(mas), mn, sizeof(struct maple_node));
+               if (active) {
+                       cp.node = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)),
+                                       mas_type);
+                       mn = mas_mn(mas);
+               } else {
+                       // Note cp.node == mas->node here.
+                       mn = &space;
+                       memcpy(mn, mas_mn(mas), sizeof(struct maple_node));
+                       memset(mas_mn(&cp), 0, sizeof(struct maple_node));
+               }
+               mas_mn(&cp)->parent = mn->parent;
+               if (prev_piv == mas->index - 1) {
+                       if (slot) // slot - 1 will translate to slot - 1 + 1.
+                               _mas_append(&cp, mn, mas_type, src_max, 0,
+                                           slot - 1);
+               } else {
+                       _mas_append(&cp, mn, mas_type, src_max, 0, slot);
+                       mte_set_pivot(cp.node, slot, mas->index - 1);
+                       mas_set_slot(&cp, slot + 1);
+               }
+
+               end_slot = mas_append_entry(&cp, entry) + 1;
+
+               // Partial slot overwrite
+               slot = mas_skip_overwritten(mas, data_end, slot);
+               if (slot >= mt_slot_count(mas->node))
+                       goto done; // potential spanning add.
+
+               mas_get_range(mas, slot, &prev_piv, &piv);
+
+               existing_entry = mte_get_rcu_sanitized(mas->node, slot);
+               if (prev_piv <= mas->last && piv > mas->last) {
+                       mte_set_rcu_slot(cp.node, end_slot, existing_entry);
+                       mas_set_safe_pivot(&cp, end_slot++, piv);
+                       cp.max = piv;
+                       slot++;
+               }
+               if (slot <= data_end && cp.max < mas->max) {
+                       _mas_append(&cp, mn, mas_type, src_max, slot,
+                                       data_end);
+               }
+done:
+               if (active)
+                       mas->node = cp.node;
+
+       }
 
        return ret;
 }
+static inline bool _mas_walk(struct ma_state *mas);
+static inline int mas_replace_tree(struct ma_state *mas, void *new_entry);
+static inline bool mas_rebalance_node(struct ma_state *mas);
+static inline unsigned long mas_next_node(struct ma_state *mas,
+               unsigned long max);
+/* Private
+ *
+ * mas_spanning_add() - Add a value which spans the nodes range.  This is
+ * handled separately than other adds because the tree may need significant
+ * alterations.
+ *
+ * Current plan:
+ * Alter in-node data to use the new maximum, walk up the tree setting the
+ * pivots & inserting skip/retry values as well as rebalance once the nodes
+ * have been altered.
+ *
+ *
+ */
+
+static inline void mas_rebalance_gaps(struct ma_state *mas)
+{
+       if (mt_is_alloc(mas->tree)) {
+               MA_STATE(r_mas, mas->tree, mas->index, mas->last);
+
+               _mas_walk(mas); // return to the updated location in the tree.
+               mas_dup_state(&r_mas, mas);
+               mas_update_gap(mas, true);
+               mas_dup_state(mas, &r_mas);
+               mas_set_slot(&r_mas, mte_parent_slot(mas->node));
+               mas_next_node(&r_mas, ULONG_MAX);
+               if (!mas_is_none(&r_mas))
+                       mas_update_gap(&r_mas, true);
+
+       }
+}
+static inline int mas_spanning_add(struct ma_state *mas, void *entry,
+               unsigned long old_max)
+{
+       unsigned char p_slot;
+       unsigned long new_pivot = mas->last;
+       int i;
+
+       MA_STATE(r_mas, mas->tree, mas->index, mas->last); // right mas.
+       MA_STATE(p_mas, mas->tree, mas->index, mas->last); // parent mas.
+       mas_dup_state(&p_mas, mas); // point to the start node.
+       mas_ascend(&p_mas);
+
+       p_slot = mte_parent_slot(mas->node);
+       do {
+               mas_set_slot(mas, p_slot); // for mas_next_node.
+               mas_set_slot(&p_mas, p_slot); // for pivot changes in parent.
+
+               MA_STATE(tmp, mas->tree, mas->index, mas->last);
+               mas_dup_state(&r_mas, mas); // point to the start node.
+               while (!mas_is_none(&r_mas) && r_mas.max <= r_mas.last) {
+                       mas_dup_state(&tmp, &r_mas);
+                       mas_next_node(&r_mas, r_mas.last);
+                       if (r_mas.max <= r_mas.last) {
+                               struct maple_enode *enode = r_mas.node;
+
+                               i = mte_parent_slot(enode);
+                               mas_ascend(&r_mas);
+                               mte_set_rcu_slot(r_mas.node, i, XA_SKIP_ENTRY);
+                               mas_set_safe_pivot(&r_mas, i, r_mas.last);
+                               if (mt_is_alloc(r_mas.tree))
+                                       mte_set_gap(r_mas.node, i, 0);
+                               mas_dup_state(&r_mas, &tmp);
+                               mte_free(enode);
+                       }
+               }
+               mas_dup_state(&r_mas, &tmp);
+               mas_next_node(&r_mas, ULONG_MAX);
+               if (!mas_is_none(&r_mas)) {
+                       unsigned long piv = mas->min;
+
+                       for (i = 0; i < mt_slot_count(r_mas.node); i++) {
+                               piv = mas_get_safe_pivot(&r_mas, i);
+                               if (!piv)
+                                       break;
+
+                               if (piv > r_mas.last)
+                                       break;
+
+                               if (mte_is_leaf(r_mas.node)) {
+                                       mte_set_rcu_slot(r_mas.node, i,
+                                                       XA_RETRY_ENTRY);
+                                       mte_set_pivot(r_mas.node, i,
+                                                       r_mas.last);
+                               } else {
+                                       mte_set_rcu_slot(r_mas.node, i,
+                                                       XA_SKIP_ENTRY);
+                                       mte_set_pivot(r_mas.node, i,
+                                                       r_mas.last);
+                                       if (mt_is_alloc(r_mas.tree))
+                                               mte_set_gap(r_mas.node, i, 0);
+                               }
+                       }
+               }
+
+               // Update the pivots.
+               mas->max = new_pivot;
+               mas_set_safe_pivot(&p_mas, p_slot, mas->max);
+               if (!mas_rebalance_node(mas))
+                       if (mt_is_alloc(mas->tree))
+                               mas_update_gap(&r_mas, true);
+
+               if (mas_is_err(mas))
+                       return 0; // FIXME: Broken tree?
+
+               // parent slot may have changed during rebalance.
+               p_slot = mte_parent_slot(mas->node);
+               //  Set up for the next loop.
+               if (!mte_is_root(mas->node)) {
+                       // Set the current parent slot for ascend.
+                       mas_set_slot(mas, p_slot);
+                       mas_ascend(mas);
+                       // Get the new levels parent slot (grand-parent slot)
+                       p_slot = mte_parent_slot(mas->node);
+
+                       if (!mte_is_root(p_mas.node)) {
+                               // Set the slot for ascending.
+                               mas_set_slot(&p_mas, p_slot);
+                               mas_ascend(&p_mas);
+                       }
+               }
+
+               if (mas->max > new_pivot)
+                       new_pivot = mas->max;
+
+       } while (mas->max < mas->last);
+
+       if (!mte_is_root(mas->node))
+               mte_set_pivot(p_mas.node, p_slot, mas->max);
+
+       mas_rebalance_node(mas);
+       if (mas_is_err(mas))
+               return 0; // FIXME: Broken tree?
+
+
+       mas_rebalance_gaps(mas);
+       return 1;
+}
 /* Private
  *
  * Insert entry into a node.
@@ -2431,7 +2470,6 @@ static inline int __mas_add(struct ma_state *mas, void *entry,
  *
  * Returns the number of slots used on success, the slot number on failure.
  */
-static inline int mas_replace_tree(struct ma_state *mas, void *new_entry);
 static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
                bool active)
 {
@@ -2446,8 +2484,9 @@ static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
        struct maple_enode *prev_enode = NULL;
        void *contents = NULL;
        bool append = false;
+       unsigned long spans_node = 0;
        int ret = 0;
-       
+
 
        if (ma_is_dense(this_type)) {
                ret = _mas_add_dense(mas, entry, slot, this_type, overwrite,
@@ -2458,26 +2497,26 @@ static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
        }
 
 
-       if (!ma_is_leaf(this_type)) {
-
-               BUG_ON(1);
-               // Allocation failed, so rebuild the tree.
-       }
+       // Bug if we are adding an entry to a non-leaf node.
+       MT_BUG_ON(mas->tree, !ma_is_leaf(this_type));
 
        old_end = mas_data_end(mas, this_type, &last_piv, &coalesce);
        if (slot > slot_cnt) // search returned MAPLE_NODE_SLOTS
                slot = old_end + 1;
 
-       _mas_get_range(mas, slot, &min, &max);
+       mas_get_range(mas, slot, &min, &max);
        if (mas_get_slot(mas) > slot_cnt)
                max = mas->max;
 
        if (slot <= old_end)
                contents = mte_get_rcu_slot(mas->node, slot);
 
+
        // Check early failures.
        if (!overwrite) {
                if (mas->last > max) { // spans range.
+                       // FIXME, this may be fine if the range isn't
+                       // coalesced, or such?
                        mas_set_err(mas, -ERANGE);
                        return 0;
                }
@@ -2487,22 +2526,15 @@ static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
                }
        }
 
-       // At this point, the we can perform the add.
 
-       // spans node means we will replace the tree.
-       if (mas->last > mas->max) {
-               //printk("Spans node %p (%lu - %lu) vs %lu - %lu\n", mas_mn(mas),
-               //              mas->min, mas->max, mas->index, mas->last);
-               return mas_replace_tree(mas, entry);
-       }
+       if (mas->last > mas->max) // spans node.
+               spans_node = mas->max;
 
+       // At this point, the we can perform the add.
        if (!mte_is_leaf(mas->node)) {
                // An allocation failed previously during a rebalance.  There
                // is no way to know how broken things are, so try to rebuild
                // the tree.
-               printk("Allocation failed previously\n");
-               printk("%ld-%ld landed at %p[%u]\n", mas->index, mas->last,
-                               mas_mn(mas), mas_get_slot(mas));
                mas_reset(mas);
                mas_first_node(mas, ULONG_MAX);
                return mas_replace_tree(mas, entry);
@@ -2517,12 +2549,13 @@ static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
                goto complete;
        }
        new_end = _mas_add_slot_cnt(mas, slot, min, max) - coalesce;
-       if (new_end > slot_cnt) {
+       if (!spans_node && new_end > slot_cnt + 1) {
                mas_split(mas, slot, active, old_end, entry);
                if (mas_is_err(mas))
                        return 0;
 
-               return old_end - new_end;
+               ret = old_end - new_end;
+               goto complete;
        }
 
        if (active) {
@@ -2534,22 +2567,22 @@ static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
        if (slot > old_end && !coalesce)
                append = true;
 
+       mas_set_slot(mas, slot);
        __mas_add(mas, entry, old_end, active, append);
 
-
 complete:
-       if (prev_enode != mas->node) {
+       if (prev_enode != mas->node)
                _mas_replace(mas, active, true);
-       }
 
-update_gap:
+       // Spanning a node can be complex.
+       if (spans_node)
+               ret = mas_spanning_add(mas, entry, spans_node);
 
+update_gap:
        if (mt_is_alloc(mas->tree))
-               mas_update_gap(mas);
+               mas_update_gap(mas, false);
 
        return ret;
-
-
 }
 
 static inline void ma_inactive_insert(struct ma_state *mas, void *entry)
@@ -2589,6 +2622,8 @@ static inline void mas_root_expand(struct ma_state *mas, void *entry)
 
        mte_set_rcu_slot(mas->node, slot, r_entry);
        mte_set_pivot(mas->node, slot, 0);
+       if (r_entry)
+               mas_set_slot(mas, 1);
 
        // FIXME: When task_size / page_size -1 works, check to ensure we are
        // not inserting above this.
@@ -2604,7 +2639,8 @@ static inline void mas_root_expand(struct ma_state *mas, void *entry)
                return;
 
        if (mt_is_alloc(mas->tree)) {
-               // FIXME: mas->index = TASK_SIZE / PAGE_SIZE - 1;
+               //FIXME: arch_get_mmap_end? mas->index = TASK_SIZE / PAGE_SIZE - 1;
+               mas_set_slot(mas, 2);
                mas->index = 0x2000000000000UL;
                mas->last = mt_max[mt];
                __mas_add(mas, XA_ZERO_ENTRY, slot, false, false);
@@ -2792,7 +2828,7 @@ restart_prev_node:
                                break;
 
                        mn = mte_get_rcu_slot(mas->node, slot);
-                       if (mt_is_empty(mn))
+                       if (mt_is_empty(mn) || xa_is_retry(mn))
                                continue;
 
                        if (level == 1) {
@@ -2828,6 +2864,7 @@ no_entry:
  *
  * Node: Not safe to call with mas->node == root
  */
+
 static inline unsigned long mas_next_node(struct ma_state *mas,
                unsigned long max)
 {
@@ -2850,7 +2887,6 @@ restart_next_node:
                start_piv = mas_get_safe_pivot(mas, slot);
                level++;
                mas_ascend(mas);
-               //printk("Ascend to %p[%u]\n", mas_mn(mas), slot);
 
                if (!mas_safe_slot(mas, &slot, 1))
                        goto ascend;
@@ -2859,13 +2895,9 @@ restart_next_node:
                        goto restart_next_node;
 
                count = mt_slot_count(mas->node);
-
                prev_piv = mas_get_safe_pivot(mas, slot);
-               //printk("while with %p[%u]\n", mas_mn(mas), slot);
-
                while (++slot < count) {
                        unsigned long pivot = mas_get_safe_pivot(mas, slot);
-                       //printk("Checking %p[%u]\n", mas_mn(mas), slot);
 
                        if (prev_piv > max)
                                goto no_entry;
@@ -2874,7 +2906,7 @@ restart_next_node:
                                break;
 
                        mn = mte_get_rcu_slot(mas->node, slot);
-                       if (mt_is_empty(mn)) {
+                       if (mt_is_empty(mn) || xa_is_retry(mn)) {
                                prev_piv = pivot;
                                continue;
                        }
@@ -2900,7 +2932,6 @@ ascend:
                if (mte_is_root(mas->node))
                        goto no_entry;
                mas_set_slot(mas, mte_parent_slot(mas->node));
-               //printk("Set parent slot to %u from %p\n", mas_get_slot(mas), mas_mn(mas));
        }
 
 no_entry:
@@ -3061,7 +3092,6 @@ retry:
                        goto next_node;
 
                if (!mte_is_leaf(mas->node) || !mas_get_slot(mas)) {
-                       //printk("Get first entry\n");
                        *range_start = mas_first_entry(mas, limit);
                        if (mas_is_none(mas)) {
                                mas->node = last_node;
@@ -3076,11 +3106,9 @@ retry:
                        return NULL;
 
 next_node:
-               //printk("Next node from %p\n", mas_mn(mas));
                p_slot = mte_parent_slot(mas->node);
                mas_set_slot(mas, p_slot);
                mas_next_node(mas, limit);
-               //printk("Next node is %p\n", mas->node);
                mas_set_slot(mas, 0);
        }
 
@@ -3111,16 +3139,13 @@ static inline void *_mas_next(struct ma_state *mas, unsigned long limit,
                return NULL;
 
        if (!mas->node || mas_is_start(mas)) {// First run.
-               //printk("First run\n");
                *range_start = 0;
                mas_start(mas);
-               //printk("start returned %p %p\n", mas->node, mas_mn(mas));
                entry = mas_range_load(mas, range_start, &range_max);
        }
 
        if (entry)
                return entry;
-       //printk("__mas_next with %p\n", mas_mn(mas));
 
        return __mas_next(mas, limit, range_start);
 }
@@ -3149,7 +3174,7 @@ static inline void* _mas_prev(struct ma_state *mas, unsigned long limit)
        unsigned long max = mas->max;
        unsigned char slot;
 
-       while(!mas_is_none(mas)) {
+       while (!mas_is_none(mas)) {
                if (mas_prev_nentry(mas, limit, &max))
                        break;
 
@@ -3171,7 +3196,7 @@ static inline void* _mas_prev(struct ma_state *mas, unsigned long limit)
 }
 
 /*
- * mas_prev() - Get the previous entry.  Can return the zero entry. 
+ * mas_prev() - Get the previous entry.  Can return the zero entry.
  *
  *
  */
@@ -3209,7 +3234,7 @@ static inline void mas_coalesce_root(struct ma_state *mas)
        unsigned char coalesce, hard_data;
        unsigned char end = mas_data_end(mas, this_type, &piv, &coalesce);
 
-       MA_CP(cp, mas->node, NULL, 0, end);
+       MA_STATE(old_mas, mas->tree, mas->index, mas->last);
 
        hard_data = ma_hard_data(end, coalesce);
        if (hard_data > mt_min_slots[this_type] - 1)
@@ -3253,64 +3278,30 @@ static inline void mas_coalesce_root(struct ma_state *mas)
                }
                /* it's not a leaf, remove a level from the tree. */
                goto remove_level;
-       } else if (hard_data < mt_min_slots[this_type] - 1)
+       } else if (hard_data <= mt_min_slots[this_type] - 1)
                goto coalesce; // Compact the node.
 
        return;
 
 coalesce:
-               mas_copy(mas, &cp);
-               if (mas_is_err(mas))
-                       return;
-
-               mas->node = cp.dst;
-remove_level:
-               mas_mn(mas)->parent = mte_to_node(this_enode)->parent;
-               mas->node = mte_mk_root(mas->node);
-               mas_replace(mas);
-}
+       mas_dup_state(&old_mas, mas);
+       mas_node_cnt(mas, 1);
+       if (mas_is_err(mas))
+               return;
 
-/* Append from src to mas */
-static inline int mas_cp_append(struct ma_state *mas, struct ma_state *src,
-               struct ma_state *p_mas, unsigned char dst_cnt,
-               unsigned char count, bool retry)
-{
-       enum maple_type mas_type = mte_node_type(mas->node);
-       int slot = 0;
-       MA_STATE(dst, mas->tree, mas->index, mas->last);
+       mas->node = mt_mk_node(mas_next_alloc(mas), this_type);
+       mas_append(mas, &old_mas, 0, end);
 
-       mas_dup_state(&dst, mas);
+remove_level:
+       mas_mn(mas)->parent = mte_to_node(this_enode)->parent;
+       mas->node = mte_mk_root(mas->node);
+       mas_replace(mas);
 
-       dst.index = src->min;
-       dst.max = src->max;
-       while (slot <= count ) {
-//             printk("\t%s: %p[%u]/%u to %p[%u]\n", __func__, mas_mn(src),
-//                     slot, count, mas_mn(&dst), dst_cnt);
-               void *entry = mte_get_rcu_slot(src->node, slot);
-               dst.last = mas_get_safe_pivot(src, slot);
-               if (mt_is_empty(entry) && dst.last != ULONG_MAX)
-                       goto next;
-               src->index = dst.index;
-               src->last = dst.last;
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, true);
 
-               dst_cnt = mas_ma_cp(src, 0, &dst, NULL, mas_mn(&dst), mas_type,
-                               dst.min, slot,
-                               entry, dst_cnt, false);
-next:
-               dst.index = dst.last + 1;
-               slot++;
-       }
-       if (retry) {
-               mte_set_pivot(p_mas->node, mte_parent_slot(mas->node),
-                               mas_get_safe_pivot(src, slot));
-               wmb();
-               do {
-                       mte_set_rcu_slot(src->node, slot, XA_RETRY_ENTRY); // relocated.
-               } while(slot-- > 0);
-       }
-       return dst_cnt;
-       // FIXME: Check mas->node's gap.
 }
+
 /** Private
  * mas_coalesce() -
  *
@@ -3320,8 +3311,7 @@ next:
 static inline bool mas_coalesce(struct ma_state *mas, unsigned char l_end_slot,
                unsigned char l_coalesce, enum maple_type l_type,
                struct ma_state *r_mas, unsigned char r_end_slot,
-               struct ma_state *p_mas, unsigned long total_slots,
-               struct ma_cp *cp)
+               struct ma_state *p_mas, unsigned long total_slots)
 {
        struct maple_node *mn;
        bool free_left = false;
@@ -3344,7 +3334,11 @@ static inline bool mas_coalesce(struct ma_state *mas, unsigned char l_end_slot,
        mas_dup_state(&dst, mas);
        mn->parent = mas_mn(mas)->parent;
        dst.node = mt_mk_node(mn, l_type);
-       l_end_slot = mas_cp_append(&dst, mas, p_mas, 0, l_end_slot, false);
+       l_end_slot = mas_append(&dst, mas, 0, l_end_slot);
+       //l_end_slot = mas_cp_append(&dst, mas, p_mas, 0, l_end_slot, false);
+
+       // If there is no entry or pivot, then set one to avoid a first entry
+       // in r_mas being incorrect.
        if (!l_end_slot && !mte_get_pivot(dst.node, 0)) {
                mte_set_pivot(dst.node, 0, mas->max);
                l_end_slot++;
@@ -3352,7 +3346,7 @@ static inline bool mas_coalesce(struct ma_state *mas, unsigned char l_end_slot,
        mas->node = dst.node;
 
 use_left:
-       mas_cp_append(mas, r_mas, p_mas, l_end_slot, r_end_slot, false);
+       mas_append(mas, r_mas, 0, r_end_slot);
 
        if (!mte_is_leaf(mas->node))
                mte_adopt_children(mas->node);
@@ -3360,38 +3354,42 @@ use_left:
        mte_set_pivot(p_mas->node, mte_parent_slot(mas->node), r_mas->max);
        mte_set_rcu_slot(p_mas->node, mte_parent_slot(r_mas->node),
                        XA_SKIP_ENTRY);
+
+       if (mt_is_alloc(mas->tree))
+               mte_set_gap(p_mas->node, mte_parent_slot(r_mas->node), 0);
+
        mte_free(r_mas->node);
+       mas->max = r_mas->max; // update limits.
+
        return free_left;
 }
-
-/** Private
- * mas_rebalance() - 
- *
- * rebalance moves data from the node to the right to this node if the
- * low watermark of data is not met.  It also calls coalesce if the right data
- * can fully be moved to the left.
- *
+/* Private
+ * mas_rebalance_node() - rebalance a single node.
+ * Returns: true if rebalancing was necessary.
  */
-static inline void mas_rebalance(struct ma_state *mas)
+static inline bool mas_rebalance_node(struct ma_state *mas)
 {
-       struct maple_enode *this_enode;
        unsigned char l_end_slot, l_coalesce, r_end_slot, r_coalesce;
        unsigned char p_slot; // parent slot.
-       unsigned char total_slots, copy_count;
+       unsigned char total_slots;
+       int copy_count;
        unsigned long l_end_piv, r_end_piv;
        enum maple_type l_type, r_type;
        bool try_anyways = false;
        bool free;
+       bool ret = false;
 
        MA_STATE(r_mas, mas->tree, mas->index, mas->last); // right state
        MA_STATE(p_mas, mas->tree, mas->index, mas->last); // parent state
-       MA_CP(cp, mas->node, NULL, 0, 0);
+       MA_STATE(src_mas, mas->tree, mas->index, mas->last);
+
 start:
        free = false;
-       this_enode = mas->node;
        l_type = mte_node_type(mas->node);
-       if (mte_is_root(mas->node))
-               return mas_coalesce_root(mas); // height reduction and such.
+       if (mte_is_root(mas->node)) {
+               mas_coalesce_root(mas); // height reduction and such.
+               return false;
+       }
 
        mas_dup_state(&p_mas, mas);
        mas_ascend(&p_mas);
@@ -3399,7 +3397,7 @@ start:
        l_end_slot = mas_data_end(mas, l_type, &l_end_piv, &l_coalesce);
        if (!try_anyways &&
            (ma_hard_data(l_end_slot, l_coalesce) >= mt_min_slots[l_type]))
-               return; // Everything's perfectly all right now.
+               goto done; // Everything's perfectly all right now.
 
        try_anyways = false;
 
@@ -3414,25 +3412,36 @@ start:
                        // Single entry in the parent.
                        if (l_end_slot < l_coalesce) { // Single entry is empty.
                                free = true;
-                       } else if (l_end_slot == l_coalesce && mas->max == ULONG_MAX) {
-                               // Possible single entry of null for
-                               // ULONG_MAX.
-                               BUG_ON(1);
+                       } else if (l_end_slot == l_coalesce &&
+                                  mas->max == ULONG_MAX) {
+                               // Possible single entry of null for ULONG_MAX
                                free = true;
                        }
                        if (free) {
                                mte_set_rcu_slot(p_mas.node, p_slot,
                                                XA_DELETED_ENTRY);
+                               if (mt_is_alloc(p_mas.tree)) {
+                                       mte_set_gap(p_mas.node, p_slot, 0);
+                                       mas_update_gap(&r_mas, false);
+                               }
                        }
                        goto done;
                }
                mas_descend(&r_mas);
-               mas_dup_state(mas, &r_mas);
-               try_anyways = true;  // Force a rebalance/coalesce of these nodes.
-               goto start; // restart with new left.
+               r_type = mte_node_type(r_mas.node);
+               r_end_slot = mas_data_end(&r_mas, r_type, &r_end_piv,
+                                         &r_coalesce);
+               if (r_end_slot - r_coalesce + l_end_slot - l_coalesce + 2
+                               < mt_slots[l_type]) {
+                       // Force a rebalance/coalesce of these nodes
+                       try_anyways = true;
+                       mas_dup_state(mas, &r_mas);
+                       goto start; // restart with new left.
+               }
+               goto done;
        }
        mas_descend(&r_mas);
-       
+
        // We have a left and a right, check if they can be coalesced.
        r_type = mte_node_type(r_mas.node); // not for racing.
        r_end_slot = mas_data_end(&r_mas, r_type, &r_end_piv, &r_coalesce);
@@ -3445,13 +3454,13 @@ start:
 
        mas_dup_state(&p_mas, mas);
        mas_ascend(&p_mas);
-       cp.src_end = l_end_slot;
+       //cp.src_end = l_end_slot;
        if (total_slots <= mt_slots[l_type]) {
-               // Totally consume the right node.
+               // Totally consume the right node; coalesce.
                free = mas_coalesce(mas, l_end_slot, l_coalesce, l_type,
-                               &r_mas, r_end_slot, &p_mas, total_slots, &cp);
-               if (mas_is_err(mas))
-                       return;
+                               &r_mas, r_end_slot, &p_mas, total_slots);
+               if (!mas_is_err(mas))
+                       ret = true;
 
                goto done;
        }
@@ -3463,34 +3472,81 @@ start:
        if (mas_is_err(mas)) {
                // Allocation failed, we could try to append as much
                // as possible here?
-               return;
+               goto done;
        }
 
-       free = true; // free this_enode after the operation.
+       free = true; // free parent.node after the operation.
+       mas_dup_state(&src_mas, mas);
        mas->node = mt_mk_node(mas_next_alloc(mas), l_type);
-       mas_mn(mas)->parent = mte_to_node(this_enode)->parent;
-       cp.dst = mas->node;
-       mas_copy(mas, &cp);
+       mas_mn(mas)->parent = mas_mn(&src_mas)->parent;
+       mas_append(mas, &src_mas, 0, l_end_slot);
+
 
        // Put 1/2 of the contents into the left if not all of them can fit.
        copy_count = (total_slots / 2) - (l_end_slot + 1 - l_coalesce);
+       mas_append(mas, &r_mas, 0, copy_count);
+       /* All relocations *must* be committed before removing real data */
+       wmb();
+       do {
+               // relocated.
+               mte_set_rcu_slot(r_mas.node, copy_count, XA_RETRY_ENTRY);
+               if (mt_is_alloc(r_mas.tree))
+                       mte_set_gap(r_mas.node, copy_count, 0);
+               mte_set_pivot(r_mas.node, copy_count, mas->max);
 
-       mas_cp_append(mas, &r_mas, &p_mas, l_end_slot, copy_count, true);
-       if (total_slots <= mt_slots[l_type]) {
-               mte_set_rcu_slot(p_mas.node, mte_parent_slot(r_mas.node),
-                               XA_SKIP_ENTRY);
-               mte_free(r_mas.node);
-       }
+       } while (copy_count-- > 0);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(&r_mas, true);
+
+       ret = true;
 
 done:
        if (!mte_is_leaf(mas->node))
                mte_adopt_children(mas->node);
+
        if (free)
                mas_replace(mas);
-       //mt_dump(mas->tree);
-       // Check parent for rebalancing.
-       mas_dup_state(mas, &p_mas);
-       goto start;
+
+       mas_dup_state(&p_mas, mas);
+       mas_set_slot(&p_mas, mte_parent_slot(mas->node));
+       mas_ascend(&p_mas);
+       mas_set_safe_pivot(&p_mas, p_slot, mas->max);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, true);
+
+       return ret;
+}
+
+/** Private
+ * mas_rebalance() -
+ *
+ * rebalance moves data from the node to the right to this node if the
+ * low watermark of data is not met.  It also calls coalesce if the right data
+ * can fully be moved to the left.
+ *
+ */
+static inline void mas_rebalance(struct ma_state *mas)
+{
+       bool at_root = false;
+
+       do {
+               if (mte_is_root(mas->node))
+                       at_root = true;
+
+               if (!mas_rebalance_node(mas))
+                       break; // We're all done here.
+
+               if (mas_is_err(mas))
+                       return;
+
+               // Check parent for rebalancing.
+               if (!at_root)
+                       mas_ascend(mas);
+       } while (!at_root);
+
+       mas_rebalance_gaps(mas);
 }
 
 static inline bool _mas_rev_awalk(struct ma_state *mas, unsigned long size)
@@ -3812,6 +3868,10 @@ skip_entry:
 
                next = _mte_get_rcu_slot(mas->node, i, type);
                if (unlikely(xa_is_skip(next))) {
+                       if (unlikely(i == mt_slots[type] - 1)) {
+                               i = MAPLE_NODE_SLOTS;
+                               goto done;
+                       }
                        mas_set_slot(mas, i + 1);
                        goto skip_entry;
                }
@@ -3877,12 +3937,10 @@ static inline int mas_safe_slot(struct ma_state *mas, int *slot,
                limit = 0;
        while (*slot != limit) {
                void *entry;
-               //printk("Checking safe slot %d\n", *slot + delta);
                if (!mas_get_safe_pivot(mas, (*slot) + delta))
                        return false;
 
                entry = mte_get_rcu_slot(mas->node, (*slot) + delta);
-               //printk("slot type %u %p[%u] has %p\n", mte_node_type(mas->node), mas_mn(mas), *slot + delta, entry);
                if (!mt_is_empty(entry))
                        return true;
                *slot += delta;
@@ -3999,15 +4057,16 @@ void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max,
                entry = mte_get_rcu_slot(mas.node, slot);
 
        mas.last = range_end;
-       if (mt_is_empty(entry) || xa_is_zero(entry))
+       if (mt_is_empty(entry) || xa_is_zero(entry) || xa_is_retry(entry))
                entry = NULL;
 
        while (mas_search_cont(&mas, range_start, max, entry)) {
                entry = _mas_next(&mas, max, &range_start);
-               if (mt_is_empty(entry) || xa_is_zero(entry))
+               if (mt_is_empty(entry) || xa_is_zero(entry) ||
+                   xa_is_retry(entry))
                        entry = NULL;
        }
-       
+
        rcu_read_unlock();
        if (entry)
                *index = mas.last + 1;
@@ -4033,7 +4092,6 @@ static inline int mas_build_replacement(struct ma_state *mas, void *new_entry,
                return 0;
        node_cnt += 3; // Room for an extra split.
 
-       //printk("Getting %ld nodes\n", node_cnt);
        mas_node_cnt(mas, node_cnt);
        if (mas_is_err(mas))
                return 0;
@@ -4053,19 +4111,14 @@ static inline int mas_build_replacement(struct ma_state *mas, void *new_entry,
        mas_reset(mas);
        mas->index = 0;
        mas->last = 0;
-       //printk("Start left\n");
        mas_for_each(mas, entry, new_index - 1) {
                new_mas.index = mas->index;
                new_mas.last = mas_get_safe_pivot(mas, mas_get_slot(mas));
-               if (entry == XA_DELETED_ENTRY)
-                       BUG_ON(1);
+               MT_BUG_ON(mas->tree, entry ==  XA_DELETED_ENTRY);
                ma_inactive_insert(&new_mas, entry);
-               if (mas_is_err(&new_mas)) {
-                       //mt_dump(new_mas.tree);
+               if (mas_is_err(&new_mas))
                        goto error;
-               }
        }
-       //printk("Done\n");
 
        // Insert the new value.
        new_mas.index = new_index;
@@ -4104,8 +4157,6 @@ static inline int mas_build_replacement(struct ma_state *mas, void *new_entry,
                }
        }
 
-       //printk("Start right from %lu\n", mas->index);
-       //mt_dump(new_mas.tree);
        mas_for_each(mas, entry, ULONG_MAX) {
                if (mas->index < new_index)
                        continue;
@@ -4116,13 +4167,14 @@ static inline int mas_build_replacement(struct ma_state *mas, void *new_entry,
                if (mas_is_err(&new_mas))
                        goto error;
        }
-       //printk("Done\n");
 
 skip_right:
 
        last = mas->tree->ma_root;
        mas->node = new_tree.ma_root;
        _mas_replace(mas, false, false);
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, false);
        mas->node = MAS_START;
        mas->alloc = new_mas.alloc;
        mte_destroy_walk(last);
@@ -4132,9 +4184,6 @@ skip_right:
 error:
        if (new_mas.tree)
                mte_destroy_walk(new_mas.tree->ma_root);
-       //printk("Failed on %lu-%lu\n", mas->index, mas->last);
-       //mt_dump(mas->tree);
-       //BUG();
        return 0;
 }
 
@@ -4157,7 +4206,7 @@ static inline int mas_replace_tree(struct ma_state *mas, void *new_entry)
        // Count the slots that will be used in the node we landed.
        slot_cnt = 3 + mas_get_slot(mas); // 3 is the max a new entry can create.
 
-       // Count the nodes that are currently used to the left. 
+       // Count the nodes that are currently used to the left.
        mas_set_slot(mas, mte_parent_slot(mas->node));
        while (!mas_is_none(mas)) {
                last = mas->node;
@@ -5077,11 +5126,29 @@ void mas_validate_gaps(struct ma_state *mas)
                        if (!mt_is_empty(mte_get_rcu_slot(mas->node, i)))
                                goto not_empty;
                } else {
+                       void *entry = mte_get_rcu_slot(mas->node, i);
                        gap = mte_get_gap(mte, i);
-                       if (mt_is_empty(mte_get_rcu_slot(mas->node, i)))
-                               BUG_ON(gap != p_end - p_start + 1);
-                       else {
-                               BUG_ON(gap >= p_end - p_start + 1);
+                       if (mt_is_empty(entry) || xa_is_retry(entry)) {
+                               if (gap != p_end - p_start + 1) {
+                                       if (xa_is_retry(entry))
+                                               pr_err("retry\n");
+
+                                       pr_err("%p[%u] -> %p %lu != %lu - %lu + 1\n",
+                                               mas_mn(mas), i,
+                                               mte_get_rcu_slot(mas->node, i),
+                                               gap, p_end, p_start);
+
+                                       MT_BUG_ON(mas->tree,
+                                               gap != p_end - p_start + 1);
+                               }
+                       } else {
+                               if (gap >= p_end - p_start + 1) {
+                                       pr_err("%p[%u] %lu >= %lu - %lu + 1 (%lu)\n",
+                                       mas_mn(mas), i, gap, p_end, p_start,
+                                       p_end - p_start + 1);
+                                       MT_BUG_ON(mas->tree,
+                                               gap >= p_end - p_start + 1);
+                               }
                        }
                }
 
@@ -5100,11 +5167,41 @@ counted:
        p_slot = mte_parent_slot(mas->node);
        p_mn = mte_parent(mte);
        MT_BUG_ON(mas->tree, max_gap > mas->max);
+       if (ma_get_gap(p_mn, p_slot, mas_parent_enum(mas, mte)) != max_gap)
+               pr_err("gap %p[%u] != %lu\n", p_mn, p_slot, max_gap);
+
        MT_BUG_ON(mas->tree,
                ma_get_gap(p_mn, p_slot, mas_parent_enum(mas, mte)) !=
                max_gap);
 }
 
+void mas_validate_parent_slot(struct ma_state *mas)
+{
+       struct maple_node *parent;
+       enum maple_type p_type = mas_parent_enum(mas, mas->node);
+       unsigned char p_slot = mte_parent_slot(mas->node);
+       int i;
+
+       if (mte_is_root(mas->node))
+               return;
+
+       parent = mte_parent(mas->node);
+       MT_BUG_ON(mas->tree, mas_mn(mas) == parent);
+
+       // Check prev/next parent slot for duplicate node entry
+
+       for (i = 0; i < mt_slots[p_type]; i++) {
+               if (i == p_slot)
+                       MT_BUG_ON(mas->tree,
+                              ma_get_rcu_slot(parent, i, p_type) != mas->node);
+               else if (ma_get_rcu_slot(parent, i, p_type) == mas->node) {
+                       pr_err("parent contains invalid child at %p[%u] %p\n",
+                               parent, i, mas_mn(mas));
+                       MT_BUG_ON(mas->tree,
+                              ma_get_rcu_slot(parent, i, p_type) == mas->node);
+               }
+       }
+}
 /**
  * Validate all pivots are within mas->min and mas->max.
  */
@@ -5117,10 +5214,25 @@ void mas_validate_limits(struct ma_state *mas)
 
        for (i = 0; i < mt_slot_count(mas->node); i++) {
                unsigned long piv = mas_get_safe_pivot(mas, i);
+
                if (!piv)
                        break;
-               BUG_ON(piv < mas->min);
-               BUG_ON(piv > mas->max);
+               if (piv < mas->min) {
+                       void *entry = mte_get_rcu_slot(mas->node, i);
+
+                       if (!mt_will_coalesce(entry)) {
+                               if (piv < mas->min)
+                                       mt_dump(mas->tree);
+                               pr_err("%p[%u] %lu < %lu\n", mas_mn(mas), i,
+                                               piv, mas->min);
+                               MT_BUG_ON(mas->tree, piv < mas->min);
+                       }
+               }
+               if (piv > mas->max) {
+                       pr_err("%p[%u] %lu > %lu\n", mas_mn(mas), i, piv,
+                               mas->max);
+                       MT_BUG_ON(mas->tree, piv > mas->max);
+               }
        }
 }
 
@@ -5166,6 +5278,7 @@ void mt_validate(struct maple_tree *mt)
        mas_start(&mas);
        mas_first_entry(&mas, ULONG_MAX);
        while (mas.node != MAS_NONE) {
+               mas_validate_parent_slot(&mas);
                mas_validate_limits(&mas);
                if (mt_is_alloc(mt))
                        mas_validate_gaps(&mas);
index a00a88d3f35c05393081941bfe67edab2ae2e10a..0a21aee5706cfb04a7a9e783b561f3ce8c2b026d 100644 (file)
@@ -85,7 +85,6 @@ static noinline void check_load(struct maple_tree *mt, unsigned long index,
                                void *ptr)
 {
        void *ret = mtree_test_load(mt, index);
-
        MT_BUG_ON(mt, ret != ptr);
 }
 
@@ -156,6 +155,8 @@ static noinline void check_nomem(struct maple_tree *mt)
        MA_STATE(ms, mt, 1, 1);
 
        MT_BUG_ON(mt, !mtree_empty(mt));
+       /* Ensure no bypassing of allocation failures */
+       mt_set_non_kernel(0);
 
        /* Storing something at 1 requires memory allocation */
        MT_BUG_ON(mt, mtree_insert(mt, 1, &ms, GFP_ATOMIC) != -ENOMEM);
@@ -874,6 +875,7 @@ static noinline void check_erase_testset(struct maple_tree *mt)
                                                a[(i)], a[(i + 1)] - 1, ptr)
 #define STORE 1
 #define ERASE 2
+#define check_erase2_debug 0
 void *mas_next(struct ma_state *mas, unsigned long max);
 static noinline void check_erase2_testset(struct maple_tree *mt,
                unsigned long *set, unsigned long size)
@@ -885,15 +887,17 @@ static noinline void check_erase2_testset(struct maple_tree *mt,
        MA_STATE(mas, mt, 0, 0);
        void *s_entry = NULL, *e_entry = NULL;
 
-       mt_set_non_kernel(127);
        for (int i = 0; i < size; i += 3) {
                unsigned long s_min, s_max;
                unsigned long e_min, e_max;
                MA_STATE(mas_start, mt, set[i+1], set[i+1]);
                MA_STATE(mas_end, mt, set[i+2]-1, set[i+2]-1);
-//             printk("%s: %d %s %lu - %lu\n", __func__, i,
-//                             set[i] == STORE ? "store" : "erase",
-//                             set[i+1], set[i+2]-1);
+               mt_set_non_kernel(127);
+#if check_erase2_debug
+               pr_warn("%s: %d %s %lu - %lu\n", __func__, i,
+                               set[i] == STORE ? "store" : "erase",
+                               set[i+1], set[i+2]-1);
+#endif
 
                s_entry = mas_range_load(&mas_start, &s_min, &s_max);
                e_entry = mas_range_load(&mas_end, &e_min, &e_max);
@@ -944,17 +948,26 @@ static noinline void check_erase2_testset(struct maple_tree *mt,
                        entry_cnt--;
                        break;
                }
+               mt_validate(mt);
+#if check_erase2_debug
+               pr_warn("Done\n");
+#endif
 
                check = 0;
                addr = 0;
                mt_for_each(mt, foo, addr, ULONG_MAX) {
-                       //printk("mt: %lu -> %p\n", addr+1, foo);
+#if check_erase2_debug
+                       pr_warn("mt: %lu -> %p\n", addr+1, foo);
+#endif
                        check++;
                        if (check > entry_cnt)
                                break;
                }
 
-               //printk("mt_for_each %d != cnt %d\n", check, entry_cnt);
+#if check_erase2_debug
+               pr_warn("mt_for_each %d and  cnt %d\n", check, entry_cnt);
+#endif
+
                MT_BUG_ON(mt, check != entry_cnt);
 
                check = 0;
@@ -964,17 +977,21 @@ static noinline void check_erase2_testset(struct maple_tree *mt,
                mas_for_each(&mas, foo, ULONG_MAX) {
                        if (mas_retry(&mas, foo))
                                continue;
-                       //printk("mas: %lu -> %p\n", addr+1, foo);
+#if check_erase2_debug
+                       pr_warn("mas: %lu -> %p\n", addr+1, foo);
+#endif
                        check++;
                        if (check > entry_cnt)
                                break;
                }
                rcu_read_unlock();
-               printk("mas_for_each %d != cnt %d\n", check, entry_cnt);
+#if check_erase2_debug
+               pr_warn("mas_for_each %d and cnt %d\n", check, entry_cnt);
+#endif
 
                MT_BUG_ON(mt, check != entry_cnt);
 
-               MT_BUG_ON(mt, mtree_load(mas.tree, 0));
+               MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL);
        }
 }
 
@@ -5485,262 +5502,4145 @@ ERASE, 47906195480576, 47906195480576,
 STORE, 94641242615808, 94641242750975,
        };
 
-       mt_set_non_kernel(3);
-       check_erase2_testset(mt, set, ARRAY_SIZE(set));
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       check_erase2_testset(mt, set2, ARRAY_SIZE(set2));
-       start = 140735933894656;
-       MT_BUG_ON(mt, !!mt_find(mt, &start, 140735933906943UL, true));
-       mtree_destroy(mt);
-
-       mt_set_non_kernel(2);
-       mtree_init(mt, 0);
-       check_erase2_testset(mt, set3, ARRAY_SIZE(set3));
-       mtree_destroy(mt);
-
-       mtree_init(mt, 0);
-       check_erase2_testset(mt, set4, ARRAY_SIZE(set4));
-       MA_STATE(mas, mt, 0, 0);
-       rcu_read_lock();
-       mas_for_each(&mas, entry, ULONG_MAX) {
-               if (mas_retry(&mas, entry))
-                       continue;
-       }
-       rcu_read_unlock();
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       mt_set_non_kernel(100);
-       check_erase2_testset(mt, set5, ARRAY_SIZE(set5));
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       check_erase2_testset(mt, set6, ARRAY_SIZE(set6));
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       check_erase2_testset(mt, set7, ARRAY_SIZE(set7));
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       check_erase2_testset(mt, set8, ARRAY_SIZE(set8));
-       mtree_destroy(mt);
-
-       mtree_init(mt, MAPLE_ALLOC_RANGE);
-       check_erase2_testset(mt, set9, ARRAY_SIZE(set9));
-       mtree_destroy(mt);
-       exit(0);
-
-}
-static noinline void check_alloc_rev_range(struct maple_tree *mt)
-{
-       /* Generated by:
-        * cat /proc/self/maps | awk '{print $1}'|
-        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
-        */
-
-       unsigned long range[] = {
-       //      Inclusive     , Exclusive.
-               0x565234af2000, 0x565234af4000,
-               0x565234af4000, 0x565234af9000,
-               0x565234af9000, 0x565234afb000,
-               0x565234afc000, 0x565234afd000,
-               0x565234afd000, 0x565234afe000,
-               0x565235def000, 0x565235e10000,
-               0x7f36d4bfd000, 0x7f36d4ee2000,
-               0x7f36d4ee2000, 0x7f36d4f04000,
-               0x7f36d4f04000, 0x7f36d504c000,
-               0x7f36d504c000, 0x7f36d5098000,
-               0x7f36d5098000, 0x7f36d5099000,
-               0x7f36d5099000, 0x7f36d509d000,
-               0x7f36d509d000, 0x7f36d509f000,
-               0x7f36d509f000, 0x7f36d50a5000,
-               0x7f36d50b9000, 0x7f36d50db000,
-               0x7f36d50db000, 0x7f36d50dc000,
-               0x7f36d50dc000, 0x7f36d50fa000,
-               0x7f36d50fa000, 0x7f36d5102000,
-               0x7f36d5102000, 0x7f36d5103000,
-               0x7f36d5103000, 0x7f36d5104000,
-               0x7f36d5104000, 0x7f36d5105000,
-               0x7fff5876b000, 0x7fff5878d000,
-               0x7fff5878e000, 0x7fff58791000,
-               0x7fff58791000, 0x7fff58793000,
-       };
-
-       unsigned long holes[] = {
-               /*  Note: start of hole is INCLUSIVE
-                *        end of hole is EXCLUSIVE
-                *        (opposite of the above table.)
-                * Start of hole, end of hole,  size of hole (+1)
-                */
-               0x565234afb000, 0x565234afc000, 0x1000,
-               0x565234afe000, 0x565235def000, 0x12F1000,
-               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
-       };
-
-       /* req_range consists of 4 values.
-        * 1. min index
-        * 2. max index
-        * 3. size
-        * 4. number that should be returned.
-        * 5. return value
-        */
-       unsigned long req_range[] = {
-               0x565234af9000, // Min
-               0x7fff58791000, // Max
-               0x1000,         // Size
-               0x7fff5878d << 12,  // First rev hole of size 0x1000
-               0,              // Return value success.
-
-               0x0,            // Min
-               0x565234AF1 << 12,    // Max
-               0x3000,         // Size
-               0x565234AEF << 12,  // hole - 3.
-               0,              // Return value success.
-
-               0x0,            // Min
-               0x0,            // Max
-               0x1000,         // Size
-               0x0,            // First rev hole of size 0x1000
-               0,              // Return value success.
-
-               0x0,            // Min
-               0x7F36D510A << 12,    // Max
-               0x4000,         // Size
-               0x7F36D5107 << 12,    // First rev hole of size 0x4000
-               0,              // Return value success.
-
-               // Ascend test.
-               0x0,
-               34148798629 << 12,
-               19 << 12,
-               34148797418 << 12,
-               0x0,
-
-               // Too big test.
-               0x0,
-               18446744073709551615UL,
-               562915594369134UL << 12,
-               0x0,
-               -EBUSY,
-
-       };
-
-       int i, range_cnt = ARRAY_SIZE(range);
-       int req_range_cnt = ARRAY_SIZE(req_range);
-
-       for (i = 0; i < range_cnt; i += 2) {
-               //                      Inclusive    , Inclusive (with the -1)
-               // printk("\tInsert %lu-%lu\n", range[i] >> 12, (range[i + 1] >> 12) - 1);
-               check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
-                               xa_mk_value(range[i] >> 12), 0);
-               mt_validate(mt);
-       }
-
-       MA_STATE(mas, mt, 0, 0);
-       unsigned long min = 0;
-       for (i = 0; i < ARRAY_SIZE(holes); i+= 3) {
-               MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, min,
-                                       holes[i+1] >> 12,
-                                       holes[i+2] >> 12));
-               MT_BUG_ON(mt, mas.index != holes[i] >> 12);
-               min = holes[i+1] >> 12;
-               mas_reset(&mas);
-       }
-
-       for (i = 0; i < req_range_cnt; i += 5) {
-               check_mtree_alloc_rrange(mt,
-                               req_range[i]   >> 12, // start
-                               req_range[i+1] >> 12, // end
-                               req_range[i+2] >> 12, // size
-                               req_range[i+3] >> 12, // expected address
-                               req_range[i+4],       // expected return
-                               xa_mk_value(req_range[i] >> 12)); // pointer
-               mt_validate(mt);
-       }
-
-       mtree_destroy(mt);
-}
-
-static noinline void check_alloc_range(struct maple_tree *mt)
-{
-       /* Generated by:
-        * cat /proc/self/maps|awk '{print $1}'|
-        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
-        */
-
-       unsigned long range[] = {
-       //      Inclusive     , Exclusive.
-               0x565234af2000, 0x565234af4000,
-               0x565234af4000, 0x565234af9000,
-               0x565234af9000, 0x565234afb000,
-               0x565234afc000, 0x565234afd000,
-               0x565234afd000, 0x565234afe000,
-               0x565235def000, 0x565235e10000,
-               0x7f36d4bfd000, 0x7f36d4ee2000,
-               0x7f36d4ee2000, 0x7f36d4f04000,
-               0x7f36d4f04000, 0x7f36d504c000,
-               0x7f36d504c000, 0x7f36d5098000,
-               0x7f36d5098000, 0x7f36d5099000,
-               0x7f36d5099000, 0x7f36d509d000,
-               0x7f36d509d000, 0x7f36d509f000,
-               0x7f36d509f000, 0x7f36d50a5000,
-               0x7f36d50b9000, 0x7f36d50db000,
-               0x7f36d50db000, 0x7f36d50dc000,
-               0x7f36d50dc000, 0x7f36d50fa000,
-               0x7f36d50fa000, 0x7f36d5102000,
-               0x7f36d5102000, 0x7f36d5103000,
-               0x7f36d5103000, 0x7f36d5104000,
-               0x7f36d5104000, 0x7f36d5105000,
-               0x7fff5876b000, 0x7fff5878d000,
-               0x7fff5878e000, 0x7fff58791000,
-               0x7fff58791000, 0x7fff58793000,
-       };
-       unsigned long holes[] = {
-               // Start of hole, end of hole,  size of hole (+1)
-               0x565234afb000, 0x565234afc000, 0x1000,
-               0x565234afe000, 0x565235def000, 0x12F1000,
-               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
-       };
-
-       /* req_range consists of 4 values.
-        * 1. min index
-        * 2. max index
-        * 3. size
-        * 4. number that should be returned.
-        * 5. return value
-        */
-       unsigned long req_range[] = {
-               0x565234af9000, // Min
-               0x7fff58791000, // Max
-               0x1000,         // Size
-               0x565234afb000, // First hole in our data of size 1000.
-               0,              // Return value success.
-
-               0x0,            // Min
-               0x7fff58791000, // Max
-               0x1F00,         // Size
-               0x0,            // First hole in our data of size 2000.
-               0,              // Return value success.
-
-               // Test ascend.
-               34148797436 << 12, // Min
-               0x7fff587AF000,    // Max
-               0x3000,         // Size
-               34148798629 << 12,             // Expected location
-               0,              // Return value success.
-
-               // Test failing.
-               34148798623 << 12,  // Min
-               34148798683 << 12,  // Max
-               0x15000,            // Size
-               0,             // Expected location
-               -EBUSY,              // Return value failed.
-
-               // Test filling entire gap.
-               34148798623 << 12,  // Min
+       unsigned long set10[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140736427839488, 140737488351231,
+ERASE, 140736427839488, 140736427839488,
+STORE, 140736427839488, 140736427843583,
+STORE, 94071213395968, 94071213567999,
+ERASE, 94071213395968, 94071213395968,
+STORE, 94071213395968, 94071213412351,
+STORE, 94071213412352, 94071213567999,
+ERASE, 94071213412352, 94071213412352,
+STORE, 94071213412352, 94071213514751,
+STORE, 94071213514752, 94071213555711,
+STORE, 94071213555712, 94071213567999,
+STORE, 139968410644480, 139968410816511,
+ERASE, 139968410644480, 139968410644480,
+STORE, 139968410644480, 139968410648575,
+STORE, 139968410648576, 139968410816511,
+ERASE, 139968410648576, 139968410648576,
+STORE, 139968410648576, 139968410771455,
+STORE, 139968410771456, 139968410804223,
+STORE, 139968410804224, 139968410812415,
+STORE, 139968410812416, 139968410816511,
+STORE, 140736429277184, 140736429281279,
+STORE, 140736429264896, 140736429277183,
+STORE, 47664384352256, 47664384360447,
+STORE, 47664384360448, 47664384368639,
+STORE, 47664384368640, 47664384532479,
+ERASE, 47664384368640, 47664384368640,
+STORE, 47664384368640, 47664384380927,
+STORE, 47664384380928, 47664384532479,
+STORE, 47664384479232, 47664384532479,
+STORE, 47664384380928, 47664384479231,
+ERASE, 47664384380928, 47664384380928,
+STORE, 47664384380928, 47664384479231,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384479232, 47664384524287,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384532479,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384524287,
+STORE, 47664384524288, 47664384532479,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384532480, 47664387583999,
+STORE, 47664385077248, 47664387583999,
+STORE, 47664384532480, 47664385077247,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664387362815,
+STORE, 47664387362816, 47664387583999,
+STORE, 47664386772992, 47664387362815,
+STORE, 47664385077248, 47664386772991,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664386772991,
+STORE, 47664387358720, 47664387362815,
+STORE, 47664386772992, 47664387358719,
+ERASE, 47664386772992, 47664386772992,
+STORE, 47664386772992, 47664387358719,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387567616, 47664387567616,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387584000, 47664389423103,
+STORE, 47664387723264, 47664389423103,
+STORE, 47664387584000, 47664387723263,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389382143,
+STORE, 47664389382144, 47664389423103,
+STORE, 47664389066752, 47664389382143,
+STORE, 47664387723264, 47664389066751,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389066751,
+STORE, 47664389378048, 47664389382143,
+STORE, 47664389066752, 47664389378047,
+ERASE, 47664389066752, 47664389066752,
+STORE, 47664389066752, 47664389378047,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389406720, 47664389406720,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389423104, 47664389558271,
+ERASE, 47664389423104, 47664389423104,
+STORE, 47664389423104, 47664389447679,
+STORE, 47664389447680, 47664389558271,
+STORE, 47664389509120, 47664389558271,
+STORE, 47664389447680, 47664389509119,
+ERASE, 47664389447680, 47664389447680,
+STORE, 47664389447680, 47664389509119,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389509120, 47664389533695,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389558271,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389533695,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389541888, 47664389541888,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389558272, 47664389578751,
+ERASE, 47664389558272, 47664389558272,
+STORE, 47664389558272, 47664389562367,
+STORE, 47664389562368, 47664389578751,
+STORE, 47664389566464, 47664389578751,
+STORE, 47664389562368, 47664389566463,
+ERASE, 47664389562368, 47664389562368,
+STORE, 47664389562368, 47664389566463,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389566464, 47664389570559,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389578751,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389570559,
+STORE, 47664389570560, 47664389578751,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389578752, 47664389586943,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389398527,
+STORE, 47664389398528, 47664389406719,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389574655,
+STORE, 47664389574656, 47664389578751,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389537791,
+STORE, 47664389537792, 47664389541887,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387559423,
+STORE, 47664387559424, 47664387567615,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384528383,
+STORE, 47664384528384, 47664384532479,
+ERASE, 94071213555712, 94071213555712,
+STORE, 94071213555712, 94071213563903,
+STORE, 94071213563904, 94071213567999,
+ERASE, 139968410804224, 139968410804224,
+STORE, 139968410804224, 139968410808319,
+STORE, 139968410808320, 139968410812415,
+ERASE, 47664384352256, 47664384352256,
+STORE, 94071244402688, 94071244537855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140728271503360, 140737488351231,
+ERASE, 140728271503360, 140728271503360,
+STORE, 140728271503360, 140728271507455,
+STORE, 94410361982976, 94410362155007,
+ERASE, 94410361982976, 94410361982976,
+STORE, 94410361982976, 94410361999359,
+STORE, 94410361999360, 94410362155007,
+ERASE, 94410361999360, 94410361999360,
+STORE, 94410361999360, 94410362101759,
+STORE, 94410362101760, 94410362142719,
+STORE, 94410362142720, 94410362155007,
+STORE, 140351953997824, 140351954169855,
+ERASE, 140351953997824, 140351953997824,
+STORE, 140351953997824, 140351954001919,
+STORE, 140351954001920, 140351954169855,
+ERASE, 140351954001920, 140351954001920,
+STORE, 140351954001920, 140351954124799,
+STORE, 140351954124800, 140351954157567,
+STORE, 140351954157568, 140351954165759,
+STORE, 140351954165760, 140351954169855,
+STORE, 140728272429056, 140728272433151,
+STORE, 140728272416768, 140728272429055,
+STORE, 47280840998912, 47280841007103,
+STORE, 47280841007104, 47280841015295,
+STORE, 47280841015296, 47280841179135,
+ERASE, 47280841015296, 47280841015296,
+STORE, 47280841015296, 47280841027583,
+STORE, 47280841027584, 47280841179135,
+STORE, 47280841125888, 47280841179135,
+STORE, 47280841027584, 47280841125887,
+ERASE, 47280841027584, 47280841027584,
+STORE, 47280841027584, 47280841125887,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841125888, 47280841170943,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841179135,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841170943,
+STORE, 47280841170944, 47280841179135,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841179136, 47280844230655,
+STORE, 47280841723904, 47280844230655,
+STORE, 47280841179136, 47280841723903,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280844009471,
+STORE, 47280844009472, 47280844230655,
+STORE, 47280843419648, 47280844009471,
+STORE, 47280841723904, 47280843419647,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280843419647,
+STORE, 47280844005376, 47280844009471,
+STORE, 47280843419648, 47280844005375,
+ERASE, 47280843419648, 47280843419648,
+STORE, 47280843419648, 47280844005375,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844214272, 47280844214272,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844230656, 47280846069759,
+STORE, 47280844369920, 47280846069759,
+STORE, 47280844230656, 47280844369919,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280846028799,
+STORE, 47280846028800, 47280846069759,
+STORE, 47280845713408, 47280846028799,
+STORE, 47280844369920, 47280845713407,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280845713407,
+STORE, 47280846024704, 47280846028799,
+STORE, 47280845713408, 47280846024703,
+ERASE, 47280845713408, 47280845713408,
+STORE, 47280845713408, 47280846024703,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846053376, 47280846053376,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846069760, 47280846204927,
+ERASE, 47280846069760, 47280846069760,
+STORE, 47280846069760, 47280846094335,
+STORE, 47280846094336, 47280846204927,
+STORE, 47280846155776, 47280846204927,
+STORE, 47280846094336, 47280846155775,
+ERASE, 47280846094336, 47280846094336,
+STORE, 47280846094336, 47280846155775,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846155776, 47280846180351,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846204927,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846180351,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846188544, 47280846188544,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846204928, 47280846225407,
+ERASE, 47280846204928, 47280846204928,
+STORE, 47280846204928, 47280846209023,
+STORE, 47280846209024, 47280846225407,
+STORE, 47280846213120, 47280846225407,
+STORE, 47280846209024, 47280846213119,
+ERASE, 47280846209024, 47280846209024,
+STORE, 47280846209024, 47280846213119,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846213120, 47280846217215,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846225407,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846217215,
+STORE, 47280846217216, 47280846225407,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846225408, 47280846233599,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846045183,
+STORE, 47280846045184, 47280846053375,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846221311,
+STORE, 47280846221312, 47280846225407,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846184447,
+STORE, 47280846184448, 47280846188543,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844206079,
+STORE, 47280844206080, 47280844214271,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841175039,
+STORE, 47280841175040, 47280841179135,
+ERASE, 94410362142720, 94410362142720,
+STORE, 94410362142720, 94410362150911,
+STORE, 94410362150912, 94410362155007,
+ERASE, 140351954157568, 140351954157568,
+STORE, 140351954157568, 140351954161663,
+STORE, 140351954161664, 140351954165759,
+ERASE, 47280840998912, 47280840998912,
+STORE, 94410379456512, 94410379591679,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732946362368, 140737488351231,
+ERASE, 140732946362368, 140732946362368,
+STORE, 140732946362368, 140732946366463,
+STORE, 94352937934848, 94352938106879,
+ERASE, 94352937934848, 94352937934848,
+STORE, 94352937934848, 94352937951231,
+STORE, 94352937951232, 94352938106879,
+ERASE, 94352937951232, 94352937951232,
+STORE, 94352937951232, 94352938053631,
+STORE, 94352938053632, 94352938094591,
+STORE, 94352938094592, 94352938106879,
+STORE, 140595518742528, 140595518914559,
+ERASE, 140595518742528, 140595518742528,
+STORE, 140595518742528, 140595518746623,
+STORE, 140595518746624, 140595518914559,
+ERASE, 140595518746624, 140595518746624,
+STORE, 140595518746624, 140595518869503,
+STORE, 140595518869504, 140595518902271,
+STORE, 140595518902272, 140595518910463,
+STORE, 140595518910464, 140595518914559,
+STORE, 140732947468288, 140732947472383,
+STORE, 140732947456000, 140732947468287,
+STORE, 47037276254208, 47037276262399,
+STORE, 47037276262400, 47037276270591,
+STORE, 47037276270592, 47037276434431,
+ERASE, 47037276270592, 47037276270592,
+STORE, 47037276270592, 47037276282879,
+STORE, 47037276282880, 47037276434431,
+STORE, 47037276381184, 47037276434431,
+STORE, 47037276282880, 47037276381183,
+ERASE, 47037276282880, 47037276282880,
+STORE, 47037276282880, 47037276381183,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276381184, 47037276426239,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276434431,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276426239,
+STORE, 47037276426240, 47037276434431,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276434432, 47037279485951,
+STORE, 47037276979200, 47037279485951,
+STORE, 47037276434432, 47037276979199,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037279264767,
+STORE, 47037279264768, 47037279485951,
+STORE, 47037278674944, 47037279264767,
+STORE, 47037276979200, 47037278674943,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037278674943,
+STORE, 47037279260672, 47037279264767,
+STORE, 47037278674944, 47037279260671,
+ERASE, 47037278674944, 47037278674944,
+STORE, 47037278674944, 47037279260671,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279469568, 47037279469568,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279485952, 47037281325055,
+STORE, 47037279625216, 47037281325055,
+STORE, 47037279485952, 47037279625215,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037281284095,
+STORE, 47037281284096, 47037281325055,
+STORE, 47037280968704, 47037281284095,
+STORE, 47037279625216, 47037280968703,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037280968703,
+STORE, 47037281280000, 47037281284095,
+STORE, 47037280968704, 47037281279999,
+ERASE, 47037280968704, 47037280968704,
+STORE, 47037280968704, 47037281279999,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281308672, 47037281308672,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281325056, 47037281460223,
+ERASE, 47037281325056, 47037281325056,
+STORE, 47037281325056, 47037281349631,
+STORE, 47037281349632, 47037281460223,
+STORE, 47037281411072, 47037281460223,
+STORE, 47037281349632, 47037281411071,
+ERASE, 47037281349632, 47037281349632,
+STORE, 47037281349632, 47037281411071,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281411072, 47037281435647,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281460223,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281435647,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281443840, 47037281443840,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281460224, 47037281480703,
+ERASE, 47037281460224, 47037281460224,
+STORE, 47037281460224, 47037281464319,
+STORE, 47037281464320, 47037281480703,
+STORE, 47037281468416, 47037281480703,
+STORE, 47037281464320, 47037281468415,
+ERASE, 47037281464320, 47037281464320,
+STORE, 47037281464320, 47037281468415,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281468416, 47037281472511,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281480703,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281472511,
+STORE, 47037281472512, 47037281480703,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281480704, 47037281488895,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281300479,
+STORE, 47037281300480, 47037281308671,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281476607,
+STORE, 47037281476608, 47037281480703,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281439743,
+STORE, 47037281439744, 47037281443839,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279461375,
+STORE, 47037279461376, 47037279469567,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276430335,
+STORE, 47037276430336, 47037276434431,
+ERASE, 94352938094592, 94352938094592,
+STORE, 94352938094592, 94352938102783,
+STORE, 94352938102784, 94352938106879,
+ERASE, 140595518902272, 140595518902272,
+STORE, 140595518902272, 140595518906367,
+STORE, 140595518906368, 140595518910463,
+ERASE, 47037276254208, 47037276254208,
+STORE, 94352938438656, 94352938573823,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733506027520, 140737488351231,
+ERASE, 140733506027520, 140733506027520,
+STORE, 140733506027520, 140733506031615,
+STORE, 94150123073536, 94150123245567,
+ERASE, 94150123073536, 94150123073536,
+STORE, 94150123073536, 94150123089919,
+STORE, 94150123089920, 94150123245567,
+ERASE, 94150123089920, 94150123089920,
+STORE, 94150123089920, 94150123192319,
+STORE, 94150123192320, 94150123233279,
+STORE, 94150123233280, 94150123245567,
+STORE, 140081290375168, 140081290547199,
+ERASE, 140081290375168, 140081290375168,
+STORE, 140081290375168, 140081290379263,
+STORE, 140081290379264, 140081290547199,
+ERASE, 140081290379264, 140081290379264,
+STORE, 140081290379264, 140081290502143,
+STORE, 140081290502144, 140081290534911,
+STORE, 140081290534912, 140081290543103,
+STORE, 140081290543104, 140081290547199,
+STORE, 140733506707456, 140733506711551,
+STORE, 140733506695168, 140733506707455,
+STORE, 47551504621568, 47551504629759,
+STORE, 47551504629760, 47551504637951,
+STORE, 47551504637952, 47551504801791,
+ERASE, 47551504637952, 47551504637952,
+STORE, 47551504637952, 47551504650239,
+STORE, 47551504650240, 47551504801791,
+STORE, 47551504748544, 47551504801791,
+STORE, 47551504650240, 47551504748543,
+ERASE, 47551504650240, 47551504650240,
+STORE, 47551504650240, 47551504748543,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504748544, 47551504793599,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504801791,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504793599,
+STORE, 47551504793600, 47551504801791,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504801792, 47551507853311,
+STORE, 47551505346560, 47551507853311,
+STORE, 47551504801792, 47551505346559,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507632127,
+STORE, 47551507632128, 47551507853311,
+STORE, 47551507042304, 47551507632127,
+STORE, 47551505346560, 47551507042303,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507042303,
+STORE, 47551507628032, 47551507632127,
+STORE, 47551507042304, 47551507628031,
+ERASE, 47551507042304, 47551507042304,
+STORE, 47551507042304, 47551507628031,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507836928, 47551507836928,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507853312, 47551509692415,
+STORE, 47551507992576, 47551509692415,
+STORE, 47551507853312, 47551507992575,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509651455,
+STORE, 47551509651456, 47551509692415,
+STORE, 47551509336064, 47551509651455,
+STORE, 47551507992576, 47551509336063,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509336063,
+STORE, 47551509647360, 47551509651455,
+STORE, 47551509336064, 47551509647359,
+ERASE, 47551509336064, 47551509336064,
+STORE, 47551509336064, 47551509647359,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509676032, 47551509676032,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509692416, 47551509827583,
+ERASE, 47551509692416, 47551509692416,
+STORE, 47551509692416, 47551509716991,
+STORE, 47551509716992, 47551509827583,
+STORE, 47551509778432, 47551509827583,
+STORE, 47551509716992, 47551509778431,
+ERASE, 47551509716992, 47551509716992,
+STORE, 47551509716992, 47551509778431,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509778432, 47551509803007,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509827583,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509803007,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509811200, 47551509811200,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509827584, 47551509848063,
+ERASE, 47551509827584, 47551509827584,
+STORE, 47551509827584, 47551509831679,
+STORE, 47551509831680, 47551509848063,
+STORE, 47551509835776, 47551509848063,
+STORE, 47551509831680, 47551509835775,
+ERASE, 47551509831680, 47551509831680,
+STORE, 47551509831680, 47551509835775,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509835776, 47551509839871,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509848063,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509839871,
+STORE, 47551509839872, 47551509848063,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509848064, 47551509856255,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509667839,
+STORE, 47551509667840, 47551509676031,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509843967,
+STORE, 47551509843968, 47551509848063,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509807103,
+STORE, 47551509807104, 47551509811199,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507828735,
+STORE, 47551507828736, 47551507836927,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504797695,
+STORE, 47551504797696, 47551504801791,
+ERASE, 94150123233280, 94150123233280,
+STORE, 94150123233280, 94150123241471,
+STORE, 94150123241472, 94150123245567,
+ERASE, 140081290534912, 140081290534912,
+STORE, 140081290534912, 140081290539007,
+STORE, 140081290539008, 140081290543103,
+ERASE, 47551504621568, 47551504621568,
+STORE, 94150148112384, 94150148247551,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734389334016, 140737488351231,
+ERASE, 140734389334016, 140734389334016,
+STORE, 140734389334016, 140734389338111,
+STORE, 94844636606464, 94844636778495,
+ERASE, 94844636606464, 94844636606464,
+STORE, 94844636606464, 94844636622847,
+STORE, 94844636622848, 94844636778495,
+ERASE, 94844636622848, 94844636622848,
+STORE, 94844636622848, 94844636725247,
+STORE, 94844636725248, 94844636766207,
+STORE, 94844636766208, 94844636778495,
+STORE, 139922765217792, 139922765389823,
+ERASE, 139922765217792, 139922765217792,
+STORE, 139922765217792, 139922765221887,
+STORE, 139922765221888, 139922765389823,
+ERASE, 139922765221888, 139922765221888,
+STORE, 139922765221888, 139922765344767,
+STORE, 139922765344768, 139922765377535,
+STORE, 139922765377536, 139922765385727,
+STORE, 139922765385728, 139922765389823,
+STORE, 140734389678080, 140734389682175,
+STORE, 140734389665792, 140734389678079,
+STORE, 47710029778944, 47710029787135,
+STORE, 47710029787136, 47710029795327,
+STORE, 47710029795328, 47710029959167,
+ERASE, 47710029795328, 47710029795328,
+STORE, 47710029795328, 47710029807615,
+STORE, 47710029807616, 47710029959167,
+STORE, 47710029905920, 47710029959167,
+STORE, 47710029807616, 47710029905919,
+ERASE, 47710029807616, 47710029807616,
+STORE, 47710029807616, 47710029905919,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029905920, 47710029950975,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029959167,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029950975,
+STORE, 47710029950976, 47710029959167,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029959168, 47710033010687,
+STORE, 47710030503936, 47710033010687,
+STORE, 47710029959168, 47710030503935,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032789503,
+STORE, 47710032789504, 47710033010687,
+STORE, 47710032199680, 47710032789503,
+STORE, 47710030503936, 47710032199679,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032199679,
+STORE, 47710032785408, 47710032789503,
+STORE, 47710032199680, 47710032785407,
+ERASE, 47710032199680, 47710032199680,
+STORE, 47710032199680, 47710032785407,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032994304, 47710032994304,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710033010688, 47710034849791,
+STORE, 47710033149952, 47710034849791,
+STORE, 47710033010688, 47710033149951,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034808831,
+STORE, 47710034808832, 47710034849791,
+STORE, 47710034493440, 47710034808831,
+STORE, 47710033149952, 47710034493439,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034493439,
+STORE, 47710034804736, 47710034808831,
+STORE, 47710034493440, 47710034804735,
+ERASE, 47710034493440, 47710034493440,
+STORE, 47710034493440, 47710034804735,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034833408, 47710034833408,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034849792, 47710034984959,
+ERASE, 47710034849792, 47710034849792,
+STORE, 47710034849792, 47710034874367,
+STORE, 47710034874368, 47710034984959,
+STORE, 47710034935808, 47710034984959,
+STORE, 47710034874368, 47710034935807,
+ERASE, 47710034874368, 47710034874368,
+STORE, 47710034874368, 47710034935807,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034935808, 47710034960383,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034984959,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034960383,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034968576, 47710034968576,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034984960, 47710035005439,
+ERASE, 47710034984960, 47710034984960,
+STORE, 47710034984960, 47710034989055,
+STORE, 47710034989056, 47710035005439,
+STORE, 47710034993152, 47710035005439,
+STORE, 47710034989056, 47710034993151,
+ERASE, 47710034989056, 47710034989056,
+STORE, 47710034989056, 47710034993151,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710034993152, 47710034997247,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710035005439,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710034997247,
+STORE, 47710034997248, 47710035005439,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710035005440, 47710035013631,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034825215,
+STORE, 47710034825216, 47710034833407,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035001343,
+STORE, 47710035001344, 47710035005439,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034964479,
+STORE, 47710034964480, 47710034968575,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032986111,
+STORE, 47710032986112, 47710032994303,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029955071,
+STORE, 47710029955072, 47710029959167,
+ERASE, 94844636766208, 94844636766208,
+STORE, 94844636766208, 94844636774399,
+STORE, 94844636774400, 94844636778495,
+ERASE, 139922765377536, 139922765377536,
+STORE, 139922765377536, 139922765381631,
+STORE, 139922765381632, 139922765385727,
+ERASE, 47710029778944, 47710029778944,
+STORE, 94844641775616, 94844641910783,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732213886976, 140737488351231,
+ERASE, 140732213886976, 140732213886976,
+STORE, 140732213886976, 140732213891071,
+STORE, 94240508887040, 94240509059071,
+ERASE, 94240508887040, 94240508887040,
+STORE, 94240508887040, 94240508903423,
+STORE, 94240508903424, 94240509059071,
+ERASE, 94240508903424, 94240508903424,
+STORE, 94240508903424, 94240509005823,
+STORE, 94240509005824, 94240509046783,
+STORE, 94240509046784, 94240509059071,
+STORE, 140275106516992, 140275106689023,
+ERASE, 140275106516992, 140275106516992,
+STORE, 140275106516992, 140275106521087,
+STORE, 140275106521088, 140275106689023,
+ERASE, 140275106521088, 140275106521088,
+STORE, 140275106521088, 140275106643967,
+STORE, 140275106643968, 140275106676735,
+STORE, 140275106676736, 140275106684927,
+STORE, 140275106684928, 140275106689023,
+STORE, 140732213977088, 140732213981183,
+STORE, 140732213964800, 140732213977087,
+STORE, 47357688479744, 47357688487935,
+STORE, 47357688487936, 47357688496127,
+STORE, 47357688496128, 47357688659967,
+ERASE, 47357688496128, 47357688496128,
+STORE, 47357688496128, 47357688508415,
+STORE, 47357688508416, 47357688659967,
+STORE, 47357688606720, 47357688659967,
+STORE, 47357688508416, 47357688606719,
+ERASE, 47357688508416, 47357688508416,
+STORE, 47357688508416, 47357688606719,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688606720, 47357688651775,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688659967,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688651775,
+STORE, 47357688651776, 47357688659967,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688659968, 47357691711487,
+STORE, 47357689204736, 47357691711487,
+STORE, 47357688659968, 47357689204735,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357691490303,
+STORE, 47357691490304, 47357691711487,
+STORE, 47357690900480, 47357691490303,
+STORE, 47357689204736, 47357690900479,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357690900479,
+STORE, 47357691486208, 47357691490303,
+STORE, 47357690900480, 47357691486207,
+ERASE, 47357690900480, 47357690900480,
+STORE, 47357690900480, 47357691486207,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691695104, 47357691695104,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691711488, 47357693550591,
+STORE, 47357691850752, 47357693550591,
+STORE, 47357691711488, 47357691850751,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693509631,
+STORE, 47357693509632, 47357693550591,
+STORE, 47357693194240, 47357693509631,
+STORE, 47357691850752, 47357693194239,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693194239,
+STORE, 47357693505536, 47357693509631,
+STORE, 47357693194240, 47357693505535,
+ERASE, 47357693194240, 47357693194240,
+STORE, 47357693194240, 47357693505535,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693534208, 47357693534208,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693550592, 47357693685759,
+ERASE, 47357693550592, 47357693550592,
+STORE, 47357693550592, 47357693575167,
+STORE, 47357693575168, 47357693685759,
+STORE, 47357693636608, 47357693685759,
+STORE, 47357693575168, 47357693636607,
+ERASE, 47357693575168, 47357693575168,
+STORE, 47357693575168, 47357693636607,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693636608, 47357693661183,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693685759,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693661183,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693669376, 47357693669376,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693685760, 47357693706239,
+ERASE, 47357693685760, 47357693685760,
+STORE, 47357693685760, 47357693689855,
+STORE, 47357693689856, 47357693706239,
+STORE, 47357693693952, 47357693706239,
+STORE, 47357693689856, 47357693693951,
+ERASE, 47357693689856, 47357693689856,
+STORE, 47357693689856, 47357693693951,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693693952, 47357693698047,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693706239,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693698047,
+STORE, 47357693698048, 47357693706239,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693706240, 47357693714431,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693526015,
+STORE, 47357693526016, 47357693534207,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693702143,
+STORE, 47357693702144, 47357693706239,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693665279,
+STORE, 47357693665280, 47357693669375,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691686911,
+STORE, 47357691686912, 47357691695103,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688655871,
+STORE, 47357688655872, 47357688659967,
+ERASE, 94240509046784, 94240509046784,
+STORE, 94240509046784, 94240509054975,
+STORE, 94240509054976, 94240509059071,
+ERASE, 140275106676736, 140275106676736,
+STORE, 140275106676736, 140275106680831,
+STORE, 140275106680832, 140275106684927,
+ERASE, 47357688479744, 47357688479744,
+STORE, 94240518361088, 94240518496255,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732688277504, 140737488351231,
+ERASE, 140732688277504, 140732688277504,
+STORE, 140732688277504, 140732688281599,
+STORE, 94629171351552, 94629172064255,
+ERASE, 94629171351552, 94629171351552,
+STORE, 94629171351552, 94629171400703,
+STORE, 94629171400704, 94629172064255,
+ERASE, 94629171400704, 94629171400704,
+STORE, 94629171400704, 94629171945471,
+STORE, 94629171945472, 94629172043775,
+STORE, 94629172043776, 94629172064255,
+STORE, 139770707644416, 139770707816447,
+ERASE, 139770707644416, 139770707644416,
+STORE, 139770707644416, 139770707648511,
+STORE, 139770707648512, 139770707816447,
+ERASE, 139770707648512, 139770707648512,
+STORE, 139770707648512, 139770707771391,
+STORE, 139770707771392, 139770707804159,
+STORE, 139770707804160, 139770707812351,
+STORE, 139770707812352, 139770707816447,
+STORE, 140732689121280, 140732689125375,
+STORE, 140732689108992, 140732689121279,
+STORE, 47862087352320, 47862087360511,
+STORE, 47862087360512, 47862087368703,
+STORE, 47862087368704, 47862087475199,
+STORE, 47862087385088, 47862087475199,
+STORE, 47862087368704, 47862087385087,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087458815,
+STORE, 47862087458816, 47862087475199,
+STORE, 47862087438336, 47862087458815,
+STORE, 47862087385088, 47862087438335,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087438335,
+STORE, 47862087454720, 47862087458815,
+STORE, 47862087438336, 47862087454719,
+ERASE, 47862087438336, 47862087438336,
+STORE, 47862087438336, 47862087454719,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087467008, 47862087467008,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087475200, 47862089314303,
+STORE, 47862087614464, 47862089314303,
+STORE, 47862087475200, 47862087614463,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862089273343,
+STORE, 47862089273344, 47862089314303,
+STORE, 47862088957952, 47862089273343,
+STORE, 47862087614464, 47862088957951,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862088957951,
+STORE, 47862089269248, 47862089273343,
+STORE, 47862088957952, 47862089269247,
+ERASE, 47862088957952, 47862088957952,
+STORE, 47862088957952, 47862089269247,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089297920, 47862089297920,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089297920, 47862089326591,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089289727,
+STORE, 47862089289728, 47862089297919,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087462911,
+STORE, 47862087462912, 47862087467007,
+ERASE, 94629172043776, 94629172043776,
+STORE, 94629172043776, 94629172060159,
+STORE, 94629172060160, 94629172064255,
+ERASE, 139770707804160, 139770707804160,
+STORE, 139770707804160, 139770707808255,
+STORE, 139770707808256, 139770707812351,
+ERASE, 47862087352320, 47862087352320,
+STORE, 94629197533184, 94629197668351,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727540711424, 140737488351231,
+ERASE, 140727540711424, 140727540711424,
+STORE, 140727540711424, 140727540715519,
+STORE, 94299865313280, 94299866025983,
+ERASE, 94299865313280, 94299865313280,
+STORE, 94299865313280, 94299865362431,
+STORE, 94299865362432, 94299866025983,
+ERASE, 94299865362432, 94299865362432,
+STORE, 94299865362432, 94299865907199,
+STORE, 94299865907200, 94299866005503,
+STORE, 94299866005504, 94299866025983,
+STORE, 140680268763136, 140680268935167,
+ERASE, 140680268763136, 140680268763136,
+STORE, 140680268763136, 140680268767231,
+STORE, 140680268767232, 140680268935167,
+ERASE, 140680268767232, 140680268767232,
+STORE, 140680268767232, 140680268890111,
+STORE, 140680268890112, 140680268922879,
+STORE, 140680268922880, 140680268931071,
+STORE, 140680268931072, 140680268935167,
+STORE, 140727541424128, 140727541428223,
+STORE, 140727541411840, 140727541424127,
+STORE, 46952526233600, 46952526241791,
+STORE, 46952526241792, 46952526249983,
+STORE, 46952526249984, 46952526356479,
+STORE, 46952526266368, 46952526356479,
+STORE, 46952526249984, 46952526266367,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526340095,
+STORE, 46952526340096, 46952526356479,
+STORE, 46952526319616, 46952526340095,
+STORE, 46952526266368, 46952526319615,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526319615,
+STORE, 46952526336000, 46952526340095,
+STORE, 46952526319616, 46952526335999,
+ERASE, 46952526319616, 46952526319616,
+STORE, 46952526319616, 46952526335999,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526348288, 46952526348288,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526356480, 46952528195583,
+STORE, 46952526495744, 46952528195583,
+STORE, 46952526356480, 46952526495743,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952528154623,
+STORE, 46952528154624, 46952528195583,
+STORE, 46952527839232, 46952528154623,
+STORE, 46952526495744, 46952527839231,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952527839231,
+STORE, 46952528150528, 46952528154623,
+STORE, 46952527839232, 46952528150527,
+ERASE, 46952527839232, 46952527839232,
+STORE, 46952527839232, 46952528150527,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528179200, 46952528179200,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528179200, 46952528207871,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528171007,
+STORE, 46952528171008, 46952528179199,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526344191,
+STORE, 46952526344192, 46952526348287,
+ERASE, 94299866005504, 94299866005504,
+STORE, 94299866005504, 94299866021887,
+STORE, 94299866021888, 94299866025983,
+ERASE, 140680268922880, 140680268922880,
+STORE, 140680268922880, 140680268926975,
+STORE, 140680268926976, 140680268931071,
+ERASE, 46952526233600, 46952526233600,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722874793984, 140737488351231,
+ERASE, 140722874793984, 140722874793984,
+STORE, 140722874793984, 140722874798079,
+STORE, 94448916213760, 94448916926463,
+ERASE, 94448916213760, 94448916213760,
+STORE, 94448916213760, 94448916262911,
+STORE, 94448916262912, 94448916926463,
+ERASE, 94448916262912, 94448916262912,
+STORE, 94448916262912, 94448916807679,
+STORE, 94448916807680, 94448916905983,
+STORE, 94448916905984, 94448916926463,
+STORE, 140389117046784, 140389117218815,
+ERASE, 140389117046784, 140389117046784,
+STORE, 140389117046784, 140389117050879,
+STORE, 140389117050880, 140389117218815,
+ERASE, 140389117050880, 140389117050880,
+STORE, 140389117050880, 140389117173759,
+STORE, 140389117173760, 140389117206527,
+STORE, 140389117206528, 140389117214719,
+STORE, 140389117214720, 140389117218815,
+STORE, 140722875297792, 140722875301887,
+STORE, 140722875285504, 140722875297791,
+STORE, 47243677949952, 47243677958143,
+STORE, 47243677958144, 47243677966335,
+STORE, 47243677966336, 47243678072831,
+STORE, 47243677982720, 47243678072831,
+STORE, 47243677966336, 47243677982719,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678056447,
+STORE, 47243678056448, 47243678072831,
+STORE, 47243678035968, 47243678056447,
+STORE, 47243677982720, 47243678035967,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678035967,
+STORE, 47243678052352, 47243678056447,
+STORE, 47243678035968, 47243678052351,
+ERASE, 47243678035968, 47243678035968,
+STORE, 47243678035968, 47243678052351,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678064640, 47243678064640,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678072832, 47243679911935,
+STORE, 47243678212096, 47243679911935,
+STORE, 47243678072832, 47243678212095,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679870975,
+STORE, 47243679870976, 47243679911935,
+STORE, 47243679555584, 47243679870975,
+STORE, 47243678212096, 47243679555583,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679555583,
+STORE, 47243679866880, 47243679870975,
+STORE, 47243679555584, 47243679866879,
+ERASE, 47243679555584, 47243679555584,
+STORE, 47243679555584, 47243679866879,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679895552, 47243679895552,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679895552, 47243679924223,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679887359,
+STORE, 47243679887360, 47243679895551,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678060543,
+STORE, 47243678060544, 47243678064639,
+ERASE, 94448916905984, 94448916905984,
+STORE, 94448916905984, 94448916922367,
+STORE, 94448916922368, 94448916926463,
+ERASE, 140389117206528, 140389117206528,
+STORE, 140389117206528, 140389117210623,
+STORE, 140389117210624, 140389117214719,
+ERASE, 47243677949952, 47243677949952,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733068505088, 140737488351231,
+ERASE, 140733068505088, 140733068505088,
+STORE, 140733068505088, 140733068509183,
+STORE, 94207145750528, 94207146463231,
+ERASE, 94207145750528, 94207145750528,
+STORE, 94207145750528, 94207145799679,
+STORE, 94207145799680, 94207146463231,
+ERASE, 94207145799680, 94207145799680,
+STORE, 94207145799680, 94207146344447,
+STORE, 94207146344448, 94207146442751,
+STORE, 94207146442752, 94207146463231,
+STORE, 140684504911872, 140684505083903,
+ERASE, 140684504911872, 140684504911872,
+STORE, 140684504911872, 140684504915967,
+STORE, 140684504915968, 140684505083903,
+ERASE, 140684504915968, 140684504915968,
+STORE, 140684504915968, 140684505038847,
+STORE, 140684505038848, 140684505071615,
+STORE, 140684505071616, 140684505079807,
+STORE, 140684505079808, 140684505083903,
+STORE, 140733068607488, 140733068611583,
+STORE, 140733068595200, 140733068607487,
+STORE, 46948290084864, 46948290093055,
+STORE, 46948290093056, 46948290101247,
+STORE, 46948290101248, 46948290207743,
+STORE, 46948290117632, 46948290207743,
+STORE, 46948290101248, 46948290117631,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290191359,
+STORE, 46948290191360, 46948290207743,
+STORE, 46948290170880, 46948290191359,
+STORE, 46948290117632, 46948290170879,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290170879,
+STORE, 46948290187264, 46948290191359,
+STORE, 46948290170880, 46948290187263,
+ERASE, 46948290170880, 46948290170880,
+STORE, 46948290170880, 46948290187263,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290199552, 46948290199552,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290207744, 46948292046847,
+STORE, 46948290347008, 46948292046847,
+STORE, 46948290207744, 46948290347007,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948292005887,
+STORE, 46948292005888, 46948292046847,
+STORE, 46948291690496, 46948292005887,
+STORE, 46948290347008, 46948291690495,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948291690495,
+STORE, 46948292001792, 46948292005887,
+STORE, 46948291690496, 46948292001791,
+ERASE, 46948291690496, 46948291690496,
+STORE, 46948291690496, 46948292001791,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292030464, 46948292030464,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292030464, 46948292059135,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292022271,
+STORE, 46948292022272, 46948292030463,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290195455,
+STORE, 46948290195456, 46948290199551,
+ERASE, 94207146442752, 94207146442752,
+STORE, 94207146442752, 94207146459135,
+STORE, 94207146459136, 94207146463231,
+ERASE, 140684505071616, 140684505071616,
+STORE, 140684505071616, 140684505075711,
+STORE, 140684505075712, 140684505079807,
+ERASE, 46948290084864, 46948290084864,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726367158272, 140737488351231,
+ERASE, 140726367158272, 140726367158272,
+STORE, 140726367158272, 140726367162367,
+STORE, 94436124106752, 94436124819455,
+ERASE, 94436124106752, 94436124106752,
+STORE, 94436124106752, 94436124155903,
+STORE, 94436124155904, 94436124819455,
+ERASE, 94436124155904, 94436124155904,
+STORE, 94436124155904, 94436124700671,
+STORE, 94436124700672, 94436124798975,
+STORE, 94436124798976, 94436124819455,
+STORE, 140049025044480, 140049025216511,
+ERASE, 140049025044480, 140049025044480,
+STORE, 140049025044480, 140049025048575,
+STORE, 140049025048576, 140049025216511,
+ERASE, 140049025048576, 140049025048576,
+STORE, 140049025048576, 140049025171455,
+STORE, 140049025171456, 140049025204223,
+STORE, 140049025204224, 140049025212415,
+STORE, 140049025212416, 140049025216511,
+STORE, 140726367256576, 140726367260671,
+STORE, 140726367244288, 140726367256575,
+STORE, 47583769952256, 47583769960447,
+STORE, 47583769960448, 47583769968639,
+STORE, 47583769968640, 47583770075135,
+STORE, 47583769985024, 47583770075135,
+STORE, 47583769968640, 47583769985023,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770058751,
+STORE, 47583770058752, 47583770075135,
+STORE, 47583770038272, 47583770058751,
+STORE, 47583769985024, 47583770038271,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770038271,
+STORE, 47583770054656, 47583770058751,
+STORE, 47583770038272, 47583770054655,
+ERASE, 47583770038272, 47583770038272,
+STORE, 47583770038272, 47583770054655,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770066944, 47583770066944,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770075136, 47583771914239,
+STORE, 47583770214400, 47583771914239,
+STORE, 47583770075136, 47583770214399,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771873279,
+STORE, 47583771873280, 47583771914239,
+STORE, 47583771557888, 47583771873279,
+STORE, 47583770214400, 47583771557887,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771557887,
+STORE, 47583771869184, 47583771873279,
+STORE, 47583771557888, 47583771869183,
+ERASE, 47583771557888, 47583771557888,
+STORE, 47583771557888, 47583771869183,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771897856, 47583771897856,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771897856, 47583771926527,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771889663,
+STORE, 47583771889664, 47583771897855,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770062847,
+STORE, 47583770062848, 47583770066943,
+ERASE, 94436124798976, 94436124798976,
+STORE, 94436124798976, 94436124815359,
+STORE, 94436124815360, 94436124819455,
+ERASE, 140049025204224, 140049025204224,
+STORE, 140049025204224, 140049025208319,
+STORE, 140049025208320, 140049025212415,
+ERASE, 47583769952256, 47583769952256,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727116099584, 140737488351231,
+ERASE, 140727116099584, 140727116099584,
+STORE, 140727116099584, 140727116103679,
+STORE, 94166319734784, 94166320447487,
+ERASE, 94166319734784, 94166319734784,
+STORE, 94166319734784, 94166319783935,
+STORE, 94166319783936, 94166320447487,
+ERASE, 94166319783936, 94166319783936,
+STORE, 94166319783936, 94166320328703,
+STORE, 94166320328704, 94166320427007,
+STORE, 94166320427008, 94166320447487,
+STORE, 139976559542272, 139976559714303,
+ERASE, 139976559542272, 139976559542272,
+STORE, 139976559542272, 139976559546367,
+STORE, 139976559546368, 139976559714303,
+ERASE, 139976559546368, 139976559546368,
+STORE, 139976559546368, 139976559669247,
+STORE, 139976559669248, 139976559702015,
+STORE, 139976559702016, 139976559710207,
+STORE, 139976559710208, 139976559714303,
+STORE, 140727116222464, 140727116226559,
+STORE, 140727116210176, 140727116222463,
+STORE, 47656235454464, 47656235462655,
+STORE, 47656235462656, 47656235470847,
+STORE, 47656235470848, 47656235577343,
+STORE, 47656235487232, 47656235577343,
+STORE, 47656235470848, 47656235487231,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235560959,
+STORE, 47656235560960, 47656235577343,
+STORE, 47656235540480, 47656235560959,
+STORE, 47656235487232, 47656235540479,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235540479,
+STORE, 47656235556864, 47656235560959,
+STORE, 47656235540480, 47656235556863,
+ERASE, 47656235540480, 47656235540480,
+STORE, 47656235540480, 47656235556863,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235569152, 47656235569152,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235577344, 47656237416447,
+STORE, 47656235716608, 47656237416447,
+STORE, 47656235577344, 47656235716607,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237375487,
+STORE, 47656237375488, 47656237416447,
+STORE, 47656237060096, 47656237375487,
+STORE, 47656235716608, 47656237060095,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237060095,
+STORE, 47656237371392, 47656237375487,
+STORE, 47656237060096, 47656237371391,
+ERASE, 47656237060096, 47656237060096,
+STORE, 47656237060096, 47656237371391,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237400064, 47656237400064,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237400064, 47656237428735,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237391871,
+STORE, 47656237391872, 47656237400063,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235565055,
+STORE, 47656235565056, 47656235569151,
+ERASE, 94166320427008, 94166320427008,
+STORE, 94166320427008, 94166320443391,
+STORE, 94166320443392, 94166320447487,
+ERASE, 139976559702016, 139976559702016,
+STORE, 139976559702016, 139976559706111,
+STORE, 139976559706112, 139976559710207,
+ERASE, 47656235454464, 47656235454464,
+STORE, 94166332153856, 94166332289023,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726412816384, 140737488351231,
+ERASE, 140726412816384, 140726412816384,
+STORE, 140726412816384, 140726412820479,
+STORE, 94094884507648, 94094885220351,
+ERASE, 94094884507648, 94094884507648,
+STORE, 94094884507648, 94094884556799,
+STORE, 94094884556800, 94094885220351,
+ERASE, 94094884556800, 94094884556800,
+STORE, 94094884556800, 94094885101567,
+STORE, 94094885101568, 94094885199871,
+STORE, 94094885199872, 94094885220351,
+STORE, 139773773938688, 139773774110719,
+ERASE, 139773773938688, 139773773938688,
+STORE, 139773773938688, 139773773942783,
+STORE, 139773773942784, 139773774110719,
+ERASE, 139773773942784, 139773773942784,
+STORE, 139773773942784, 139773774065663,
+STORE, 139773774065664, 139773774098431,
+STORE, 139773774098432, 139773774106623,
+STORE, 139773774106624, 139773774110719,
+STORE, 140726412963840, 140726412967935,
+STORE, 140726412951552, 140726412963839,
+STORE, 47859021058048, 47859021066239,
+STORE, 47859021066240, 47859021074431,
+STORE, 47859021074432, 47859021180927,
+STORE, 47859021090816, 47859021180927,
+STORE, 47859021074432, 47859021090815,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021164543,
+STORE, 47859021164544, 47859021180927,
+STORE, 47859021144064, 47859021164543,
+STORE, 47859021090816, 47859021144063,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021144063,
+STORE, 47859021160448, 47859021164543,
+STORE, 47859021144064, 47859021160447,
+ERASE, 47859021144064, 47859021144064,
+STORE, 47859021144064, 47859021160447,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021172736, 47859021172736,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021180928, 47859023020031,
+STORE, 47859021320192, 47859023020031,
+STORE, 47859021180928, 47859021320191,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022979071,
+STORE, 47859022979072, 47859023020031,
+STORE, 47859022663680, 47859022979071,
+STORE, 47859021320192, 47859022663679,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022663679,
+STORE, 47859022974976, 47859022979071,
+STORE, 47859022663680, 47859022974975,
+ERASE, 47859022663680, 47859022663680,
+STORE, 47859022663680, 47859022974975,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859023003648, 47859023003648,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859023003648, 47859023032319,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859022995455,
+STORE, 47859022995456, 47859023003647,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021168639,
+STORE, 47859021168640, 47859021172735,
+ERASE, 94094885199872, 94094885199872,
+STORE, 94094885199872, 94094885216255,
+STORE, 94094885216256, 94094885220351,
+ERASE, 139773774098432, 139773774098432,
+STORE, 139773774098432, 139773774102527,
+STORE, 139773774102528, 139773774106623,
+ERASE, 47859021058048, 47859021058048,
+STORE, 94094901108736, 94094901243903,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736567963648, 140737488351231,
+ERASE, 140736567963648, 140736567963648,
+STORE, 140736567963648, 140736567967743,
+STORE, 94924425748480, 94924426461183,
+ERASE, 94924425748480, 94924425748480,
+STORE, 94924425748480, 94924425797631,
+STORE, 94924425797632, 94924426461183,
+ERASE, 94924425797632, 94924425797632,
+STORE, 94924425797632, 94924426342399,
+STORE, 94924426342400, 94924426440703,
+STORE, 94924426440704, 94924426461183,
+STORE, 140042126319616, 140042126491647,
+ERASE, 140042126319616, 140042126319616,
+STORE, 140042126319616, 140042126323711,
+STORE, 140042126323712, 140042126491647,
+ERASE, 140042126323712, 140042126323712,
+STORE, 140042126323712, 140042126446591,
+STORE, 140042126446592, 140042126479359,
+STORE, 140042126479360, 140042126487551,
+STORE, 140042126487552, 140042126491647,
+STORE, 140736568672256, 140736568676351,
+STORE, 140736568659968, 140736568672255,
+STORE, 47590668677120, 47590668685311,
+STORE, 47590668685312, 47590668693503,
+STORE, 47590668693504, 47590668799999,
+STORE, 47590668709888, 47590668799999,
+STORE, 47590668693504, 47590668709887,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668783615,
+STORE, 47590668783616, 47590668799999,
+STORE, 47590668763136, 47590668783615,
+STORE, 47590668709888, 47590668763135,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668763135,
+STORE, 47590668779520, 47590668783615,
+STORE, 47590668763136, 47590668779519,
+ERASE, 47590668763136, 47590668763136,
+STORE, 47590668763136, 47590668779519,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668791808, 47590668791808,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668800000, 47590670639103,
+STORE, 47590668939264, 47590670639103,
+STORE, 47590668800000, 47590668939263,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670598143,
+STORE, 47590670598144, 47590670639103,
+STORE, 47590670282752, 47590670598143,
+STORE, 47590668939264, 47590670282751,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670282751,
+STORE, 47590670594048, 47590670598143,
+STORE, 47590670282752, 47590670594047,
+ERASE, 47590670282752, 47590670282752,
+STORE, 47590670282752, 47590670594047,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670622720, 47590670622720,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670622720, 47590670651391,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670614527,
+STORE, 47590670614528, 47590670622719,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668787711,
+STORE, 47590668787712, 47590668791807,
+ERASE, 94924426440704, 94924426440704,
+STORE, 94924426440704, 94924426457087,
+STORE, 94924426457088, 94924426461183,
+ERASE, 140042126479360, 140042126479360,
+STORE, 140042126479360, 140042126483455,
+STORE, 140042126483456, 140042126487551,
+ERASE, 47590668677120, 47590668677120,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733281439744, 140737488351231,
+ERASE, 140733281439744, 140733281439744,
+STORE, 140733281439744, 140733281443839,
+STORE, 94490667069440, 94490667782143,
+ERASE, 94490667069440, 94490667069440,
+STORE, 94490667069440, 94490667118591,
+STORE, 94490667118592, 94490667782143,
+ERASE, 94490667118592, 94490667118592,
+STORE, 94490667118592, 94490667663359,
+STORE, 94490667663360, 94490667761663,
+STORE, 94490667761664, 94490667782143,
+STORE, 139878215118848, 139878215290879,
+ERASE, 139878215118848, 139878215118848,
+STORE, 139878215118848, 139878215122943,
+STORE, 139878215122944, 139878215290879,
+ERASE, 139878215122944, 139878215122944,
+STORE, 139878215122944, 139878215245823,
+STORE, 139878215245824, 139878215278591,
+STORE, 139878215278592, 139878215286783,
+STORE, 139878215286784, 139878215290879,
+STORE, 140733281464320, 140733281468415,
+STORE, 140733281452032, 140733281464319,
+STORE, 47754579877888, 47754579886079,
+STORE, 47754579886080, 47754579894271,
+STORE, 47754579894272, 47754580000767,
+STORE, 47754579910656, 47754580000767,
+STORE, 47754579894272, 47754579910655,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579984383,
+STORE, 47754579984384, 47754580000767,
+STORE, 47754579963904, 47754579984383,
+STORE, 47754579910656, 47754579963903,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579963903,
+STORE, 47754579980288, 47754579984383,
+STORE, 47754579963904, 47754579980287,
+ERASE, 47754579963904, 47754579963904,
+STORE, 47754579963904, 47754579980287,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579992576, 47754579992576,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754580000768, 47754581839871,
+STORE, 47754580140032, 47754581839871,
+STORE, 47754580000768, 47754580140031,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581798911,
+STORE, 47754581798912, 47754581839871,
+STORE, 47754581483520, 47754581798911,
+STORE, 47754580140032, 47754581483519,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581483519,
+STORE, 47754581794816, 47754581798911,
+STORE, 47754581483520, 47754581794815,
+ERASE, 47754581483520, 47754581483520,
+STORE, 47754581483520, 47754581794815,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581823488, 47754581823488,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581823488, 47754581852159,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581815295,
+STORE, 47754581815296, 47754581823487,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579988479,
+STORE, 47754579988480, 47754579992575,
+ERASE, 94490667761664, 94490667761664,
+STORE, 94490667761664, 94490667778047,
+STORE, 94490667778048, 94490667782143,
+ERASE, 139878215278592, 139878215278592,
+STORE, 139878215278592, 139878215282687,
+STORE, 139878215282688, 139878215286783,
+ERASE, 47754579877888, 47754579877888,
+STORE, 94490669649920, 94490669785087,
+STORE, 140737488347136, 140737488351231,
+STORE, 140735382188032, 140737488351231,
+ERASE, 140735382188032, 140735382188032,
+STORE, 140735382188032, 140735382192127,
+STORE, 94150181302272, 94150182014975,
+ERASE, 94150181302272, 94150181302272,
+STORE, 94150181302272, 94150181351423,
+STORE, 94150181351424, 94150182014975,
+ERASE, 94150181351424, 94150181351424,
+STORE, 94150181351424, 94150181896191,
+STORE, 94150181896192, 94150181994495,
+STORE, 94150181994496, 94150182014975,
+STORE, 139679752458240, 139679752630271,
+ERASE, 139679752458240, 139679752458240,
+STORE, 139679752458240, 139679752462335,
+STORE, 139679752462336, 139679752630271,
+ERASE, 139679752462336, 139679752462336,
+STORE, 139679752462336, 139679752585215,
+STORE, 139679752585216, 139679752617983,
+STORE, 139679752617984, 139679752626175,
+STORE, 139679752626176, 139679752630271,
+STORE, 140735382536192, 140735382540287,
+STORE, 140735382523904, 140735382536191,
+STORE, 47953042538496, 47953042546687,
+STORE, 47953042546688, 47953042554879,
+STORE, 47953042554880, 47953042661375,
+STORE, 47953042571264, 47953042661375,
+STORE, 47953042554880, 47953042571263,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042644991,
+STORE, 47953042644992, 47953042661375,
+STORE, 47953042624512, 47953042644991,
+STORE, 47953042571264, 47953042624511,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042624511,
+STORE, 47953042640896, 47953042644991,
+STORE, 47953042624512, 47953042640895,
+ERASE, 47953042624512, 47953042624512,
+STORE, 47953042624512, 47953042640895,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042653184, 47953042653184,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042661376, 47953044500479,
+STORE, 47953042800640, 47953044500479,
+STORE, 47953042661376, 47953042800639,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044459519,
+STORE, 47953044459520, 47953044500479,
+STORE, 47953044144128, 47953044459519,
+STORE, 47953042800640, 47953044144127,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044144127,
+STORE, 47953044455424, 47953044459519,
+STORE, 47953044144128, 47953044455423,
+ERASE, 47953044144128, 47953044144128,
+STORE, 47953044144128, 47953044455423,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044484096, 47953044484096,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044484096, 47953044512767,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044475903,
+STORE, 47953044475904, 47953044484095,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042649087,
+STORE, 47953042649088, 47953042653183,
+ERASE, 94150181994496, 94150181994496,
+STORE, 94150181994496, 94150182010879,
+STORE, 94150182010880, 94150182014975,
+ERASE, 139679752617984, 139679752617984,
+STORE, 139679752617984, 139679752622079,
+STORE, 139679752622080, 139679752626175,
+ERASE, 47953042538496, 47953042538496,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737044123648, 140737488351231,
+ERASE, 140737044123648, 140737044123648,
+STORE, 140737044123648, 140737044127743,
+STORE, 94425324294144, 94425325006847,
+ERASE, 94425324294144, 94425324294144,
+STORE, 94425324294144, 94425324343295,
+STORE, 94425324343296, 94425325006847,
+ERASE, 94425324343296, 94425324343296,
+STORE, 94425324343296, 94425324888063,
+STORE, 94425324888064, 94425324986367,
+STORE, 94425324986368, 94425325006847,
+STORE, 140382015016960, 140382015188991,
+ERASE, 140382015016960, 140382015016960,
+STORE, 140382015016960, 140382015021055,
+STORE, 140382015021056, 140382015188991,
+ERASE, 140382015021056, 140382015021056,
+STORE, 140382015021056, 140382015143935,
+STORE, 140382015143936, 140382015176703,
+STORE, 140382015176704, 140382015184895,
+STORE, 140382015184896, 140382015188991,
+STORE, 140737045585920, 140737045590015,
+STORE, 140737045573632, 140737045585919,
+STORE, 47250779979776, 47250779987967,
+STORE, 47250779987968, 47250779996159,
+STORE, 47250779996160, 47250780102655,
+STORE, 47250780012544, 47250780102655,
+STORE, 47250779996160, 47250780012543,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780086271,
+STORE, 47250780086272, 47250780102655,
+STORE, 47250780065792, 47250780086271,
+STORE, 47250780012544, 47250780065791,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780065791,
+STORE, 47250780082176, 47250780086271,
+STORE, 47250780065792, 47250780082175,
+ERASE, 47250780065792, 47250780065792,
+STORE, 47250780065792, 47250780082175,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780094464, 47250780094464,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780102656, 47250781941759,
+STORE, 47250780241920, 47250781941759,
+STORE, 47250780102656, 47250780241919,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781900799,
+STORE, 47250781900800, 47250781941759,
+STORE, 47250781585408, 47250781900799,
+STORE, 47250780241920, 47250781585407,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781585407,
+STORE, 47250781896704, 47250781900799,
+STORE, 47250781585408, 47250781896703,
+ERASE, 47250781585408, 47250781585408,
+STORE, 47250781585408, 47250781896703,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781925376, 47250781925376,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781925376, 47250781954047,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781917183,
+STORE, 47250781917184, 47250781925375,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780090367,
+STORE, 47250780090368, 47250780094463,
+ERASE, 94425324986368, 94425324986368,
+STORE, 94425324986368, 94425325002751,
+STORE, 94425325002752, 94425325006847,
+ERASE, 140382015176704, 140382015176704,
+STORE, 140382015176704, 140382015180799,
+STORE, 140382015180800, 140382015184895,
+ERASE, 47250779979776, 47250779979776,
+STORE, 94425351438336, 94425351573503,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736801144832, 140737488351231,
+ERASE, 140736801144832, 140736801144832,
+STORE, 140736801144832, 140736801148927,
+STORE, 94629429358592, 94629430071295,
+ERASE, 94629429358592, 94629429358592,
+STORE, 94629429358592, 94629429407743,
+STORE, 94629429407744, 94629430071295,
+ERASE, 94629429407744, 94629429407744,
+STORE, 94629429407744, 94629429952511,
+STORE, 94629429952512, 94629430050815,
+STORE, 94629430050816, 94629430071295,
+STORE, 139801685483520, 139801685655551,
+ERASE, 139801685483520, 139801685483520,
+STORE, 139801685483520, 139801685487615,
+STORE, 139801685487616, 139801685655551,
+ERASE, 139801685487616, 139801685487616,
+STORE, 139801685487616, 139801685610495,
+STORE, 139801685610496, 139801685643263,
+STORE, 139801685643264, 139801685651455,
+STORE, 139801685651456, 139801685655551,
+STORE, 140736801198080, 140736801202175,
+STORE, 140736801185792, 140736801198079,
+STORE, 47831109513216, 47831109521407,
+STORE, 47831109521408, 47831109529599,
+STORE, 47831109529600, 47831109636095,
+STORE, 47831109545984, 47831109636095,
+STORE, 47831109529600, 47831109545983,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109619711,
+STORE, 47831109619712, 47831109636095,
+STORE, 47831109599232, 47831109619711,
+STORE, 47831109545984, 47831109599231,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109599231,
+STORE, 47831109615616, 47831109619711,
+STORE, 47831109599232, 47831109615615,
+ERASE, 47831109599232, 47831109599232,
+STORE, 47831109599232, 47831109615615,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109627904, 47831109627904,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109636096, 47831111475199,
+STORE, 47831109775360, 47831111475199,
+STORE, 47831109636096, 47831109775359,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111434239,
+STORE, 47831111434240, 47831111475199,
+STORE, 47831111118848, 47831111434239,
+STORE, 47831109775360, 47831111118847,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111118847,
+STORE, 47831111430144, 47831111434239,
+STORE, 47831111118848, 47831111430143,
+ERASE, 47831111118848, 47831111118848,
+STORE, 47831111118848, 47831111430143,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111458816, 47831111458816,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111458816, 47831111487487,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111450623,
+STORE, 47831111450624, 47831111458815,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109623807,
+STORE, 47831109623808, 47831109627903,
+ERASE, 94629430050816, 94629430050816,
+STORE, 94629430050816, 94629430067199,
+STORE, 94629430067200, 94629430071295,
+ERASE, 139801685643264, 139801685643264,
+STORE, 139801685643264, 139801685647359,
+STORE, 139801685647360, 139801685651455,
+ERASE, 47831109513216, 47831109513216,
+STORE, 140737488347136, 140737488351231,
+STORE, 140729419612160, 140737488351231,
+ERASE, 140729419612160, 140729419612160,
+STORE, 140729419612160, 140729419616255,
+STORE, 94443354148864, 94443354861567,
+ERASE, 94443354148864, 94443354148864,
+STORE, 94443354148864, 94443354198015,
+STORE, 94443354198016, 94443354861567,
+ERASE, 94443354198016, 94443354198016,
+STORE, 94443354198016, 94443354742783,
+STORE, 94443354742784, 94443354841087,
+STORE, 94443354841088, 94443354861567,
+STORE, 139741700038656, 139741700210687,
+ERASE, 139741700038656, 139741700038656,
+STORE, 139741700038656, 139741700042751,
+STORE, 139741700042752, 139741700210687,
+ERASE, 139741700042752, 139741700042752,
+STORE, 139741700042752, 139741700165631,
+STORE, 139741700165632, 139741700198399,
+STORE, 139741700198400, 139741700206591,
+STORE, 139741700206592, 139741700210687,
+STORE, 140729420574720, 140729420578815,
+STORE, 140729420562432, 140729420574719,
+STORE, 47891094958080, 47891094966271,
+STORE, 47891094966272, 47891094974463,
+STORE, 47891094974464, 47891095080959,
+STORE, 47891094990848, 47891095080959,
+STORE, 47891094974464, 47891094990847,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095064575,
+STORE, 47891095064576, 47891095080959,
+STORE, 47891095044096, 47891095064575,
+STORE, 47891094990848, 47891095044095,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095044095,
+STORE, 47891095060480, 47891095064575,
+STORE, 47891095044096, 47891095060479,
+ERASE, 47891095044096, 47891095044096,
+STORE, 47891095044096, 47891095060479,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095072768, 47891095072768,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095080960, 47891096920063,
+STORE, 47891095220224, 47891096920063,
+STORE, 47891095080960, 47891095220223,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096879103,
+STORE, 47891096879104, 47891096920063,
+STORE, 47891096563712, 47891096879103,
+STORE, 47891095220224, 47891096563711,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096563711,
+STORE, 47891096875008, 47891096879103,
+STORE, 47891096563712, 47891096875007,
+ERASE, 47891096563712, 47891096563712,
+STORE, 47891096563712, 47891096875007,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096903680, 47891096903680,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096903680, 47891096932351,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096895487,
+STORE, 47891096895488, 47891096903679,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095068671,
+STORE, 47891095068672, 47891095072767,
+ERASE, 94443354841088, 94443354841088,
+STORE, 94443354841088, 94443354857471,
+STORE, 94443354857472, 94443354861567,
+ERASE, 139741700198400, 139741700198400,
+STORE, 139741700198400, 139741700202495,
+STORE, 139741700202496, 139741700206591,
+ERASE, 47891094958080, 47891094958080,
+STORE, 94443360825344, 94443360960511,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722961661952, 140737488351231,
+ERASE, 140722961661952, 140722961661952,
+STORE, 140722961661952, 140722961666047,
+STORE, 94878388944896, 94878389657599,
+ERASE, 94878388944896, 94878388944896,
+STORE, 94878388944896, 94878388994047,
+STORE, 94878388994048, 94878389657599,
+ERASE, 94878388994048, 94878388994048,
+STORE, 94878388994048, 94878389538815,
+STORE, 94878389538816, 94878389637119,
+STORE, 94878389637120, 94878389657599,
+STORE, 140210690056192, 140210690228223,
+ERASE, 140210690056192, 140210690056192,
+STORE, 140210690056192, 140210690060287,
+STORE, 140210690060288, 140210690228223,
+ERASE, 140210690060288, 140210690060288,
+STORE, 140210690060288, 140210690183167,
+STORE, 140210690183168, 140210690215935,
+STORE, 140210690215936, 140210690224127,
+STORE, 140210690224128, 140210690228223,
+STORE, 140722963148800, 140722963152895,
+STORE, 140722963136512, 140722963148799,
+STORE, 47422104940544, 47422104948735,
+STORE, 47422104948736, 47422104956927,
+STORE, 47422104956928, 47422105063423,
+STORE, 47422104973312, 47422105063423,
+STORE, 47422104956928, 47422104973311,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105047039,
+STORE, 47422105047040, 47422105063423,
+STORE, 47422105026560, 47422105047039,
+STORE, 47422104973312, 47422105026559,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105026559,
+STORE, 47422105042944, 47422105047039,
+STORE, 47422105026560, 47422105042943,
+ERASE, 47422105026560, 47422105026560,
+STORE, 47422105026560, 47422105042943,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105055232, 47422105055232,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105063424, 47422106902527,
+STORE, 47422105202688, 47422106902527,
+STORE, 47422105063424, 47422105202687,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106861567,
+STORE, 47422106861568, 47422106902527,
+STORE, 47422106546176, 47422106861567,
+STORE, 47422105202688, 47422106546175,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106546175,
+STORE, 47422106857472, 47422106861567,
+STORE, 47422106546176, 47422106857471,
+ERASE, 47422106546176, 47422106546176,
+STORE, 47422106546176, 47422106857471,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106886144, 47422106886144,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106886144, 47422106914815,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106877951,
+STORE, 47422106877952, 47422106886143,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105051135,
+STORE, 47422105051136, 47422105055231,
+ERASE, 94878389637120, 94878389637120,
+STORE, 94878389637120, 94878389653503,
+STORE, 94878389653504, 94878389657599,
+ERASE, 140210690215936, 140210690215936,
+STORE, 140210690215936, 140210690220031,
+STORE, 140210690220032, 140210690224127,
+ERASE, 47422104940544, 47422104940544,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727690309632, 140737488351231,
+ERASE, 140727690309632, 140727690309632,
+STORE, 140727690309632, 140727690313727,
+STORE, 94121892208640, 94121892921343,
+ERASE, 94121892208640, 94121892208640,
+STORE, 94121892208640, 94121892257791,
+STORE, 94121892257792, 94121892921343,
+ERASE, 94121892257792, 94121892257792,
+STORE, 94121892257792, 94121892802559,
+STORE, 94121892802560, 94121892900863,
+STORE, 94121892900864, 94121892921343,
+STORE, 140662438326272, 140662438498303,
+ERASE, 140662438326272, 140662438326272,
+STORE, 140662438326272, 140662438330367,
+STORE, 140662438330368, 140662438498303,
+ERASE, 140662438330368, 140662438330368,
+STORE, 140662438330368, 140662438453247,
+STORE, 140662438453248, 140662438486015,
+STORE, 140662438486016, 140662438494207,
+STORE, 140662438494208, 140662438498303,
+STORE, 140727690379264, 140727690383359,
+STORE, 140727690366976, 140727690379263,
+STORE, 46970356670464, 46970356678655,
+STORE, 46970356678656, 46970356686847,
+STORE, 46970356686848, 46970356793343,
+STORE, 46970356703232, 46970356793343,
+STORE, 46970356686848, 46970356703231,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356776959,
+STORE, 46970356776960, 46970356793343,
+STORE, 46970356756480, 46970356776959,
+STORE, 46970356703232, 46970356756479,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356756479,
+STORE, 46970356772864, 46970356776959,
+STORE, 46970356756480, 46970356772863,
+ERASE, 46970356756480, 46970356756480,
+STORE, 46970356756480, 46970356772863,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356785152, 46970356785152,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356793344, 46970358632447,
+STORE, 46970356932608, 46970358632447,
+STORE, 46970356793344, 46970356932607,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358591487,
+STORE, 46970358591488, 46970358632447,
+STORE, 46970358276096, 46970358591487,
+STORE, 46970356932608, 46970358276095,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358276095,
+STORE, 46970358587392, 46970358591487,
+STORE, 46970358276096, 46970358587391,
+ERASE, 46970358276096, 46970358276096,
+STORE, 46970358276096, 46970358587391,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358616064, 46970358616064,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358616064, 46970358644735,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358607871,
+STORE, 46970358607872, 46970358616063,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356781055,
+STORE, 46970356781056, 46970356785151,
+ERASE, 94121892900864, 94121892900864,
+STORE, 94121892900864, 94121892917247,
+STORE, 94121892917248, 94121892921343,
+ERASE, 140662438486016, 140662438486016,
+STORE, 140662438486016, 140662438490111,
+STORE, 140662438490112, 140662438494207,
+ERASE, 46970356670464, 46970356670464,
+STORE, 94121898610688, 94121898745855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737189351424, 140737488351231,
+ERASE, 140737189351424, 140737189351424,
+STORE, 140737189351424, 140737189355519,
+STORE, 93847948832768, 93847949545471,
+ERASE, 93847948832768, 93847948832768,
+STORE, 93847948832768, 93847948881919,
+STORE, 93847948881920, 93847949545471,
+ERASE, 93847948881920, 93847948881920,
+STORE, 93847948881920, 93847949426687,
+STORE, 93847949426688, 93847949524991,
+STORE, 93847949524992, 93847949545471,
+STORE, 139698989985792, 139698990157823,
+ERASE, 139698989985792, 139698989985792,
+STORE, 139698989985792, 139698989989887,
+STORE, 139698989989888, 139698990157823,
+ERASE, 139698989989888, 139698989989888,
+STORE, 139698989989888, 139698990112767,
+STORE, 139698990112768, 139698990145535,
+STORE, 139698990145536, 139698990153727,
+STORE, 139698990153728, 139698990157823,
+STORE, 140737189744640, 140737189748735,
+STORE, 140737189732352, 140737189744639,
+STORE, 47933805010944, 47933805019135,
+STORE, 47933805019136, 47933805027327,
+STORE, 47933805027328, 47933805133823,
+STORE, 47933805043712, 47933805133823,
+STORE, 47933805027328, 47933805043711,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805117439,
+STORE, 47933805117440, 47933805133823,
+STORE, 47933805096960, 47933805117439,
+STORE, 47933805043712, 47933805096959,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805096959,
+STORE, 47933805113344, 47933805117439,
+STORE, 47933805096960, 47933805113343,
+ERASE, 47933805096960, 47933805096960,
+STORE, 47933805096960, 47933805113343,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805125632, 47933805125632,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805133824, 47933806972927,
+STORE, 47933805273088, 47933806972927,
+STORE, 47933805133824, 47933805273087,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806931967,
+STORE, 47933806931968, 47933806972927,
+STORE, 47933806616576, 47933806931967,
+STORE, 47933805273088, 47933806616575,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806616575,
+STORE, 47933806927872, 47933806931967,
+STORE, 47933806616576, 47933806927871,
+ERASE, 47933806616576, 47933806616576,
+STORE, 47933806616576, 47933806927871,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806956544, 47933806956544,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806956544, 47933806985215,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806948351,
+STORE, 47933806948352, 47933806956543,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805121535,
+STORE, 47933805121536, 47933805125631,
+ERASE, 93847949524992, 93847949524992,
+STORE, 93847949524992, 93847949541375,
+STORE, 93847949541376, 93847949545471,
+ERASE, 139698990145536, 139698990145536,
+STORE, 139698990145536, 139698990149631,
+STORE, 139698990149632, 139698990153727,
+ERASE, 47933805010944, 47933805010944,
+STORE, 140737488347136, 140737488351231,
+STORE, 140725553991680, 140737488351231,
+ERASE, 140725553991680, 140725553991680,
+STORE, 140725553991680, 140725553995775,
+STORE, 93980056248320, 93980056961023,
+ERASE, 93980056248320, 93980056248320,
+STORE, 93980056248320, 93980056297471,
+STORE, 93980056297472, 93980056961023,
+ERASE, 93980056297472, 93980056297472,
+STORE, 93980056297472, 93980056842239,
+STORE, 93980056842240, 93980056940543,
+STORE, 93980056940544, 93980056961023,
+STORE, 140146588971008, 140146589143039,
+ERASE, 140146588971008, 140146588971008,
+STORE, 140146588971008, 140146588975103,
+STORE, 140146588975104, 140146589143039,
+ERASE, 140146588975104, 140146588975104,
+STORE, 140146588975104, 140146589097983,
+STORE, 140146589097984, 140146589130751,
+STORE, 140146589130752, 140146589138943,
+STORE, 140146589138944, 140146589143039,
+STORE, 140725554860032, 140725554864127,
+STORE, 140725554847744, 140725554860031,
+STORE, 47486206025728, 47486206033919,
+STORE, 47486206033920, 47486206042111,
+STORE, 47486206042112, 47486206148607,
+STORE, 47486206058496, 47486206148607,
+STORE, 47486206042112, 47486206058495,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206132223,
+STORE, 47486206132224, 47486206148607,
+STORE, 47486206111744, 47486206132223,
+STORE, 47486206058496, 47486206111743,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206111743,
+STORE, 47486206128128, 47486206132223,
+STORE, 47486206111744, 47486206128127,
+ERASE, 47486206111744, 47486206111744,
+STORE, 47486206111744, 47486206128127,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206140416, 47486206140416,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206148608, 47486207987711,
+STORE, 47486206287872, 47486207987711,
+STORE, 47486206148608, 47486206287871,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207946751,
+STORE, 47486207946752, 47486207987711,
+STORE, 47486207631360, 47486207946751,
+STORE, 47486206287872, 47486207631359,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207631359,
+STORE, 47486207942656, 47486207946751,
+STORE, 47486207631360, 47486207942655,
+ERASE, 47486207631360, 47486207631360,
+STORE, 47486207631360, 47486207942655,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207971328, 47486207971328,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207971328, 47486207999999,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207963135,
+STORE, 47486207963136, 47486207971327,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206136319,
+STORE, 47486206136320, 47486206140415,
+ERASE, 93980056940544, 93980056940544,
+STORE, 93980056940544, 93980056956927,
+STORE, 93980056956928, 93980056961023,
+ERASE, 140146589130752, 140146589130752,
+STORE, 140146589130752, 140146589134847,
+STORE, 140146589134848, 140146589138943,
+ERASE, 47486206025728, 47486206025728,
+STORE, 93980070006784, 93980070141951,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727334776832, 140737488351231,
+ERASE, 140727334776832, 140727334776832,
+STORE, 140727334776832, 140727334780927,
+STORE, 94049747247104, 94049747959807,
+ERASE, 94049747247104, 94049747247104,
+STORE, 94049747247104, 94049747296255,
+STORE, 94049747296256, 94049747959807,
+ERASE, 94049747296256, 94049747296256,
+STORE, 94049747296256, 94049747841023,
+STORE, 94049747841024, 94049747939327,
+STORE, 94049747939328, 94049747959807,
+STORE, 140227307216896, 140227307388927,
+ERASE, 140227307216896, 140227307216896,
+STORE, 140227307216896, 140227307220991,
+STORE, 140227307220992, 140227307388927,
+ERASE, 140227307220992, 140227307220992,
+STORE, 140227307220992, 140227307343871,
+STORE, 140227307343872, 140227307376639,
+STORE, 140227307376640, 140227307384831,
+STORE, 140227307384832, 140227307388927,
+STORE, 140727335337984, 140727335342079,
+STORE, 140727335325696, 140727335337983,
+STORE, 47405487779840, 47405487788031,
+STORE, 47405487788032, 47405487796223,
+STORE, 47405487796224, 47405487902719,
+STORE, 47405487812608, 47405487902719,
+STORE, 47405487796224, 47405487812607,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487886335,
+STORE, 47405487886336, 47405487902719,
+STORE, 47405487865856, 47405487886335,
+STORE, 47405487812608, 47405487865855,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487865855,
+STORE, 47405487882240, 47405487886335,
+STORE, 47405487865856, 47405487882239,
+ERASE, 47405487865856, 47405487865856,
+STORE, 47405487865856, 47405487882239,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487894528, 47405487894528,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487902720, 47405489741823,
+STORE, 47405488041984, 47405489741823,
+STORE, 47405487902720, 47405488041983,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489700863,
+STORE, 47405489700864, 47405489741823,
+STORE, 47405489385472, 47405489700863,
+STORE, 47405488041984, 47405489385471,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489385471,
+STORE, 47405489696768, 47405489700863,
+STORE, 47405489385472, 47405489696767,
+ERASE, 47405489385472, 47405489385472,
+STORE, 47405489385472, 47405489696767,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489725440, 47405489725440,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489725440, 47405489754111,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489717247,
+STORE, 47405489717248, 47405489725439,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487890431,
+STORE, 47405487890432, 47405487894527,
+ERASE, 94049747939328, 94049747939328,
+STORE, 94049747939328, 94049747955711,
+STORE, 94049747955712, 94049747959807,
+ERASE, 140227307376640, 140227307376640,
+STORE, 140227307376640, 140227307380735,
+STORE, 140227307380736, 140227307384831,
+ERASE, 47405487779840, 47405487779840,
+STORE, 94049758810112, 94049758945279,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727079718912, 140737488351231,
+ERASE, 140727079718912, 140727079718912,
+STORE, 140727079718912, 140727079723007,
+STORE, 94250996527104, 94250997239807,
+ERASE, 94250996527104, 94250996527104,
+STORE, 94250996527104, 94250996576255,
+STORE, 94250996576256, 94250997239807,
+ERASE, 94250996576256, 94250996576256,
+STORE, 94250996576256, 94250997121023,
+STORE, 94250997121024, 94250997219327,
+STORE, 94250997219328, 94250997239807,
+STORE, 140060022587392, 140060022759423,
+ERASE, 140060022587392, 140060022587392,
+STORE, 140060022587392, 140060022591487,
+STORE, 140060022591488, 140060022759423,
+ERASE, 140060022591488, 140060022591488,
+STORE, 140060022591488, 140060022714367,
+STORE, 140060022714368, 140060022747135,
+STORE, 140060022747136, 140060022755327,
+STORE, 140060022755328, 140060022759423,
+STORE, 140727079788544, 140727079792639,
+STORE, 140727079776256, 140727079788543,
+STORE, 47572772409344, 47572772417535,
+STORE, 47572772417536, 47572772425727,
+STORE, 47572772425728, 47572772532223,
+STORE, 47572772442112, 47572772532223,
+STORE, 47572772425728, 47572772442111,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772515839,
+STORE, 47572772515840, 47572772532223,
+STORE, 47572772495360, 47572772515839,
+STORE, 47572772442112, 47572772495359,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772495359,
+STORE, 47572772511744, 47572772515839,
+STORE, 47572772495360, 47572772511743,
+ERASE, 47572772495360, 47572772495360,
+STORE, 47572772495360, 47572772511743,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772524032, 47572772524032,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772532224, 47572774371327,
+STORE, 47572772671488, 47572774371327,
+STORE, 47572772532224, 47572772671487,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774330367,
+STORE, 47572774330368, 47572774371327,
+STORE, 47572774014976, 47572774330367,
+STORE, 47572772671488, 47572774014975,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774014975,
+STORE, 47572774326272, 47572774330367,
+STORE, 47572774014976, 47572774326271,
+ERASE, 47572774014976, 47572774014976,
+STORE, 47572774014976, 47572774326271,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774354944, 47572774354944,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774354944, 47572774383615,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774346751,
+STORE, 47572774346752, 47572774354943,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772519935,
+STORE, 47572772519936, 47572772524031,
+ERASE, 94250997219328, 94250997219328,
+STORE, 94250997219328, 94250997235711,
+STORE, 94250997235712, 94250997239807,
+ERASE, 140060022747136, 140060022747136,
+STORE, 140060022747136, 140060022751231,
+STORE, 140060022751232, 140060022755327,
+ERASE, 47572772409344, 47572772409344,
+STORE, 94251018305536, 94251018440703,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730012389376, 140737488351231,
+ERASE, 140730012389376, 140730012389376,
+STORE, 140730012389376, 140730012393471,
+STORE, 94382607675392, 94382607695871,
+ERASE, 94382607675392, 94382607675392,
+STORE, 94382607675392, 94382607679487,
+STORE, 94382607679488, 94382607695871,
+ERASE, 94382607679488, 94382607679488,
+STORE, 94382607679488, 94382607683583,
+STORE, 94382607683584, 94382607687679,
+STORE, 94382607687680, 94382607695871,
+STORE, 140252451454976, 140252451627007,
+ERASE, 140252451454976, 140252451454976,
+STORE, 140252451454976, 140252451459071,
+STORE, 140252451459072, 140252451627007,
+ERASE, 140252451459072, 140252451459072,
+STORE, 140252451459072, 140252451581951,
+STORE, 140252451581952, 140252451614719,
+STORE, 140252451614720, 140252451622911,
+STORE, 140252451622912, 140252451627007,
+STORE, 140730013548544, 140730013552639,
+STORE, 140730013536256, 140730013548543,
+STORE, 47380343541760, 47380343549951,
+STORE, 47380343549952, 47380343558143,
+STORE, 47380343558144, 47380345397247,
+STORE, 47380343697408, 47380345397247,
+STORE, 47380343558144, 47380343697407,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345356287,
+STORE, 47380345356288, 47380345397247,
+STORE, 47380345040896, 47380345356287,
+STORE, 47380343697408, 47380345040895,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345040895,
+STORE, 47380345352192, 47380345356287,
+STORE, 47380345040896, 47380345352191,
+ERASE, 47380345040896, 47380345040896,
+STORE, 47380345040896, 47380345352191,
+STORE, 47380345380864, 47380345397247,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345380864, 47380345380864,
+STORE, 47380345380864, 47380345397247,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345372671,
+STORE, 47380345372672, 47380345380863,
+ERASE, 94382607687680, 94382607687680,
+STORE, 94382607687680, 94382607691775,
+STORE, 94382607691776, 94382607695871,
+ERASE, 140252451614720, 140252451614720,
+STORE, 140252451614720, 140252451618815,
+STORE, 140252451618816, 140252451622911,
+ERASE, 47380343541760, 47380343541760,
+STORE, 94382626803712, 94382626938879,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730900271104, 140737488351231,
+ERASE, 140730900271104, 140730900271104,
+STORE, 140730900271104, 140730900275199,
+STORE, 93855478120448, 93855478337535,
+ERASE, 93855478120448, 93855478120448,
+STORE, 93855478120448, 93855478198271,
+STORE, 93855478198272, 93855478337535,
+ERASE, 93855478198272, 93855478198272,
+STORE, 93855478198272, 93855478243327,
+STORE, 93855478243328, 93855478288383,
+STORE, 93855478288384, 93855478337535,
+STORE, 140092686573568, 140092686745599,
+ERASE, 140092686573568, 140092686573568,
+STORE, 140092686573568, 140092686577663,
+STORE, 140092686577664, 140092686745599,
+ERASE, 140092686577664, 140092686577664,
+STORE, 140092686577664, 140092686700543,
+STORE, 140092686700544, 140092686733311,
+STORE, 140092686733312, 140092686741503,
+STORE, 140092686741504, 140092686745599,
+STORE, 140730900537344, 140730900541439,
+STORE, 140730900525056, 140730900537343,
+STORE, 47540108423168, 47540108431359,
+STORE, 47540108431360, 47540108439551,
+STORE, 47540108439552, 47540110278655,
+STORE, 47540108578816, 47540110278655,
+STORE, 47540108439552, 47540108578815,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540110237695,
+STORE, 47540110237696, 47540110278655,
+STORE, 47540109922304, 47540110237695,
+STORE, 47540108578816, 47540109922303,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540109922303,
+STORE, 47540110233600, 47540110237695,
+STORE, 47540109922304, 47540110233599,
+ERASE, 47540109922304, 47540109922304,
+STORE, 47540109922304, 47540110233599,
+STORE, 47540110262272, 47540110278655,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110262272, 47540110262272,
+STORE, 47540110262272, 47540110278655,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110254079,
+STORE, 47540110254080, 47540110262271,
+ERASE, 93855478288384, 93855478288384,
+STORE, 93855478288384, 93855478333439,
+STORE, 93855478333440, 93855478337535,
+ERASE, 140092686733312, 140092686733312,
+STORE, 140092686733312, 140092686737407,
+STORE, 140092686737408, 140092686741503,
+ERASE, 47540108423168, 47540108423168,
+STORE, 93855492222976, 93855492358143,
+STORE, 93855492222976, 93855492493311,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733498146816, 140737488351231,
+ERASE, 140733498146816, 140733498146816,
+STORE, 140733498146816, 140733498150911,
+STORE, 94170739654656, 94170740367359,
+ERASE, 94170739654656, 94170739654656,
+STORE, 94170739654656, 94170739703807,
+STORE, 94170739703808, 94170740367359,
+ERASE, 94170739703808, 94170739703808,
+STORE, 94170739703808, 94170740248575,
+STORE, 94170740248576, 94170740346879,
+STORE, 94170740346880, 94170740367359,
+STORE, 140024788877312, 140024789049343,
+ERASE, 140024788877312, 140024788877312,
+STORE, 140024788877312, 140024788881407,
+STORE, 140024788881408, 140024789049343,
+ERASE, 140024788881408, 140024788881408,
+STORE, 140024788881408, 140024789004287,
+STORE, 140024789004288, 140024789037055,
+STORE, 140024789037056, 140024789045247,
+STORE, 140024789045248, 140024789049343,
+STORE, 140733499023360, 140733499027455,
+STORE, 140733499011072, 140733499023359,
+STORE, 47608006119424, 47608006127615,
+STORE, 47608006127616, 47608006135807,
+STORE, 47608006135808, 47608006242303,
+STORE, 47608006152192, 47608006242303,
+STORE, 47608006135808, 47608006152191,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006225919,
+STORE, 47608006225920, 47608006242303,
+STORE, 47608006205440, 47608006225919,
+STORE, 47608006152192, 47608006205439,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006205439,
+STORE, 47608006221824, 47608006225919,
+STORE, 47608006205440, 47608006221823,
+ERASE, 47608006205440, 47608006205440,
+STORE, 47608006205440, 47608006221823,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006234112, 47608006234112,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006242304, 47608008081407,
+STORE, 47608006381568, 47608008081407,
+STORE, 47608006242304, 47608006381567,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608008040447,
+STORE, 47608008040448, 47608008081407,
+STORE, 47608007725056, 47608008040447,
+STORE, 47608006381568, 47608007725055,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608007725055,
+STORE, 47608008036352, 47608008040447,
+STORE, 47608007725056, 47608008036351,
+ERASE, 47608007725056, 47608007725056,
+STORE, 47608007725056, 47608008036351,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008065024, 47608008065024,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008065024, 47608008093695,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008056831,
+STORE, 47608008056832, 47608008065023,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006230015,
+STORE, 47608006230016, 47608006234111,
+ERASE, 94170740346880, 94170740346880,
+STORE, 94170740346880, 94170740363263,
+STORE, 94170740363264, 94170740367359,
+ERASE, 140024789037056, 140024789037056,
+STORE, 140024789037056, 140024789041151,
+STORE, 140024789041152, 140024789045247,
+ERASE, 47608006119424, 47608006119424,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730264326144, 140737488351231,
+ERASE, 140730264326144, 140730264326144,
+STORE, 140730264326144, 140730264330239,
+STORE, 94653216407552, 94653217120255,
+ERASE, 94653216407552, 94653216407552,
+STORE, 94653216407552, 94653216456703,
+STORE, 94653216456704, 94653217120255,
+ERASE, 94653216456704, 94653216456704,
+STORE, 94653216456704, 94653217001471,
+STORE, 94653217001472, 94653217099775,
+STORE, 94653217099776, 94653217120255,
+STORE, 140103617011712, 140103617183743,
+ERASE, 140103617011712, 140103617011712,
+STORE, 140103617011712, 140103617015807,
+STORE, 140103617015808, 140103617183743,
+ERASE, 140103617015808, 140103617015808,
+STORE, 140103617015808, 140103617138687,
+STORE, 140103617138688, 140103617171455,
+STORE, 140103617171456, 140103617179647,
+STORE, 140103617179648, 140103617183743,
+STORE, 140730265427968, 140730265432063,
+STORE, 140730265415680, 140730265427967,
+STORE, 47529177985024, 47529177993215,
+STORE, 47529177993216, 47529178001407,
+STORE, 47529178001408, 47529178107903,
+STORE, 47529178017792, 47529178107903,
+STORE, 47529178001408, 47529178017791,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178091519,
+STORE, 47529178091520, 47529178107903,
+STORE, 47529178071040, 47529178091519,
+STORE, 47529178017792, 47529178071039,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178071039,
+STORE, 47529178087424, 47529178091519,
+STORE, 47529178071040, 47529178087423,
+ERASE, 47529178071040, 47529178071040,
+STORE, 47529178071040, 47529178087423,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178099712, 47529178099712,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178107904, 47529179947007,
+STORE, 47529178247168, 47529179947007,
+STORE, 47529178107904, 47529178247167,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179906047,
+STORE, 47529179906048, 47529179947007,
+STORE, 47529179590656, 47529179906047,
+STORE, 47529178247168, 47529179590655,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179590655,
+STORE, 47529179901952, 47529179906047,
+STORE, 47529179590656, 47529179901951,
+ERASE, 47529179590656, 47529179590656,
+STORE, 47529179590656, 47529179901951,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179930624, 47529179930624,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179930624, 47529179959295,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179922431,
+STORE, 47529179922432, 47529179930623,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178095615,
+STORE, 47529178095616, 47529178099711,
+ERASE, 94653217099776, 94653217099776,
+STORE, 94653217099776, 94653217116159,
+STORE, 94653217116160, 94653217120255,
+ERASE, 140103617171456, 140103617171456,
+STORE, 140103617171456, 140103617175551,
+STORE, 140103617175552, 140103617179647,
+ERASE, 47529177985024, 47529177985024,
+STORE, 94653241135104, 94653241270271,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736284549120, 140737488351231,
+ERASE, 140736284549120, 140736284549120,
+STORE, 140736284549120, 140736284553215,
+STORE, 93963663822848, 93963664506879,
+ERASE, 93963663822848, 93963663822848,
+STORE, 93963663822848, 93963663884287,
+STORE, 93963663884288, 93963664506879,
+ERASE, 93963663884288, 93963663884288,
+STORE, 93963663884288, 93963664240639,
+STORE, 93963664240640, 93963664379903,
+STORE, 93963664379904, 93963664506879,
+STORE, 140450188439552, 140450188611583,
+ERASE, 140450188439552, 140450188439552,
+STORE, 140450188439552, 140450188443647,
+STORE, 140450188443648, 140450188611583,
+ERASE, 140450188443648, 140450188443648,
+STORE, 140450188443648, 140450188566527,
+STORE, 140450188566528, 140450188599295,
+STORE, 140450188599296, 140450188607487,
+STORE, 140450188607488, 140450188611583,
+STORE, 140736284577792, 140736284581887,
+STORE, 140736284565504, 140736284577791,
+STORE, 47182606557184, 47182606565375,
+STORE, 47182606565376, 47182606573567,
+STORE, 47182606573568, 47182608412671,
+STORE, 47182606712832, 47182608412671,
+STORE, 47182606573568, 47182606712831,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608371711,
+STORE, 47182608371712, 47182608412671,
+STORE, 47182608056320, 47182608371711,
+STORE, 47182606712832, 47182608056319,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608056319,
+STORE, 47182608367616, 47182608371711,
+STORE, 47182608056320, 47182608367615,
+ERASE, 47182608056320, 47182608056320,
+STORE, 47182608056320, 47182608367615,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608396288, 47182608396288,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608412672, 47182608523263,
+STORE, 47182608429056, 47182608523263,
+STORE, 47182608412672, 47182608429055,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608515071,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608490496, 47182608515071,
+STORE, 47182608429056, 47182608490495,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608490495,
+STORE, 47182608510976, 47182608515071,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608490496, 47182608490496,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608523264, 47182608568319,
+ERASE, 47182608523264, 47182608523264,
+STORE, 47182608523264, 47182608531455,
+STORE, 47182608531456, 47182608568319,
+STORE, 47182608551936, 47182608568319,
+STORE, 47182608531456, 47182608551935,
+ERASE, 47182608531456, 47182608531456,
+STORE, 47182608531456, 47182608551935,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608551936, 47182608560127,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608568319,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608560127,
+STORE, 47182608560128, 47182608568319,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608568320, 47182608916479,
+STORE, 47182608609280, 47182608916479,
+STORE, 47182608568320, 47182608609279,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608891903,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608822272, 47182608891903,
+STORE, 47182608609280, 47182608822271,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608822271,
+STORE, 47182608887808, 47182608891903,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608822272, 47182608822272,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608916480, 47182611177471,
+STORE, 47182609068032, 47182611177471,
+STORE, 47182608916480, 47182609068031,
+ERASE, 47182609068032, 47182609068032,
+STORE, 47182609068032, 47182611161087,
+STORE, 47182611161088, 47182611177471,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611169280, 47182611169280,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611177472, 47182611312639,
+ERASE, 47182611177472, 47182611177472,
+STORE, 47182611177472, 47182611202047,
+STORE, 47182611202048, 47182611312639,
+STORE, 47182611263488, 47182611312639,
+STORE, 47182611202048, 47182611263487,
+ERASE, 47182611202048, 47182611202048,
+STORE, 47182611202048, 47182611263487,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611263488, 47182611288063,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611312639,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611288063,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611296256, 47182611296256,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611296256, 47182611320831,
+STORE, 47182611320832, 47182611484671,
+ERASE, 47182611320832, 47182611320832,
+STORE, 47182611320832, 47182611333119,
+STORE, 47182611333120, 47182611484671,
+STORE, 47182611431424, 47182611484671,
+STORE, 47182611333120, 47182611431423,
+ERASE, 47182611333120, 47182611333120,
+STORE, 47182611333120, 47182611431423,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611431424, 47182611476479,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611484671,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611476479,
+STORE, 47182611476480, 47182611484671,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611484672, 47182612082687,
+STORE, 47182611603456, 47182612082687,
+STORE, 47182611484672, 47182611603455,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182612029439,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182611918848, 47182612029439,
+STORE, 47182611603456, 47182611918847,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182611918847,
+STORE, 47182612025344, 47182612029439,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182611918848, 47182611918848,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182612082688, 47182615134207,
+STORE, 47182612627456, 47182615134207,
+STORE, 47182612082688, 47182612627455,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614913023,
+STORE, 47182614913024, 47182615134207,
+STORE, 47182614323200, 47182614913023,
+STORE, 47182612627456, 47182614323199,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614323199,
+STORE, 47182614908928, 47182614913023,
+STORE, 47182614323200, 47182614908927,
+ERASE, 47182614323200, 47182614323200,
+STORE, 47182614323200, 47182614908927,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182615117824, 47182615117824,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182615134208, 47182615166975,
+ERASE, 47182615134208, 47182615134208,
+STORE, 47182615134208, 47182615142399,
+STORE, 47182615142400, 47182615166975,
+STORE, 47182615154688, 47182615166975,
+STORE, 47182615142400, 47182615154687,
+ERASE, 47182615142400, 47182615142400,
+STORE, 47182615142400, 47182615154687,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615154688, 47182615158783,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615166975,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615158783,
+STORE, 47182615158784, 47182615166975,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615166976, 47182615203839,
+ERASE, 47182615166976, 47182615166976,
+STORE, 47182615166976, 47182615175167,
+STORE, 47182615175168, 47182615203839,
+STORE, 47182615191552, 47182615203839,
+STORE, 47182615175168, 47182615191551,
+ERASE, 47182615175168, 47182615175168,
+STORE, 47182615175168, 47182615191551,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615191552, 47182615195647,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615203839,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615195647,
+STORE, 47182615195648, 47182615203839,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615203840, 47182615678975,
+ERASE, 47182615203840, 47182615203840,
+STORE, 47182615203840, 47182615212031,
+STORE, 47182615212032, 47182615678975,
+STORE, 47182615547904, 47182615678975,
+STORE, 47182615212032, 47182615547903,
+ERASE, 47182615212032, 47182615212032,
+STORE, 47182615212032, 47182615547903,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615547904, 47182615670783,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615678975,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615670783,
+STORE, 47182615670784, 47182615678975,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615678976, 47182615687167,
+STORE, 47182615687168, 47182615707647,
+ERASE, 47182615687168, 47182615687168,
+STORE, 47182615687168, 47182615691263,
+STORE, 47182615691264, 47182615707647,
+STORE, 47182615695360, 47182615707647,
+STORE, 47182615691264, 47182615695359,
+ERASE, 47182615691264, 47182615691264,
+STORE, 47182615691264, 47182615695359,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615695360, 47182615699455,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615707647,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615699455,
+STORE, 47182615699456, 47182615707647,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615707648, 47182615715839,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608388095,
+STORE, 47182608388096, 47182608396287,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615703551,
+STORE, 47182615703552, 47182615707647,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611292159,
+STORE, 47182611292160, 47182611296255,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615674879,
+STORE, 47182615674880, 47182615678975,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615199743,
+STORE, 47182615199744, 47182615203839,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615162879,
+STORE, 47182615162880, 47182615166975,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615109631,
+STORE, 47182615109632, 47182615117823,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612066303,
+STORE, 47182612066304, 47182612082687,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611480575,
+STORE, 47182611480576, 47182611484671,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611165183,
+STORE, 47182611165184, 47182611169279,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608912383,
+STORE, 47182608912384, 47182608916479,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608564223,
+STORE, 47182608564224, 47182608568319,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608519167,
+STORE, 47182608519168, 47182608523263,
+ERASE, 93963664379904, 93963664379904,
+STORE, 93963664379904, 93963664502783,
+STORE, 93963664502784, 93963664506879,
+ERASE, 140450188599296, 140450188599296,
+STORE, 140450188599296, 140450188603391,
+STORE, 140450188603392, 140450188607487,
+ERASE, 47182606557184, 47182606557184,
+STORE, 93963694723072, 93963694858239,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730313261056, 140737488351231,
+ERASE, 140730313261056, 140730313261056,
+STORE, 140730313261056, 140730313265151,
+STORE, 94386579017728, 94386579697663,
+ERASE, 94386579017728, 94386579017728,
+STORE, 94386579017728, 94386579083263,
+STORE, 94386579083264, 94386579697663,
+ERASE, 94386579083264, 94386579083264,
+STORE, 94386579083264, 94386579431423,
+STORE, 94386579431424, 94386579570687,
+STORE, 94386579570688, 94386579697663,
+STORE, 140124810838016, 140124811010047,
+ERASE, 140124810838016, 140124810838016,
+STORE, 140124810838016, 140124810842111,
+STORE, 140124810842112, 140124811010047,
+ERASE, 140124810842112, 140124810842112,
+STORE, 140124810842112, 140124810964991,
+STORE, 140124810964992, 140124810997759,
+STORE, 140124810997760, 140124811005951,
+STORE, 140124811005952, 140124811010047,
+STORE, 140730313601024, 140730313605119,
+STORE, 140730313588736, 140730313601023,
+STORE, 47507984158720, 47507984166911,
+STORE, 47507984166912, 47507984175103,
+STORE, 47507984175104, 47507986014207,
+STORE, 47507984314368, 47507986014207,
+STORE, 47507984175104, 47507984314367,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985973247,
+STORE, 47507985973248, 47507986014207,
+STORE, 47507985657856, 47507985973247,
+STORE, 47507984314368, 47507985657855,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985657855,
+STORE, 47507985969152, 47507985973247,
+STORE, 47507985657856, 47507985969151,
+ERASE, 47507985657856, 47507985657856,
+STORE, 47507985657856, 47507985969151,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985997824, 47507985997824,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507986014208, 47507986124799,
+STORE, 47507986030592, 47507986124799,
+STORE, 47507986014208, 47507986030591,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986116607,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986092032, 47507986116607,
+STORE, 47507986030592, 47507986092031,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986092031,
+STORE, 47507986112512, 47507986116607,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986092032, 47507986092032,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986124800, 47507986169855,
+ERASE, 47507986124800, 47507986124800,
+STORE, 47507986124800, 47507986132991,
+STORE, 47507986132992, 47507986169855,
+STORE, 47507986153472, 47507986169855,
+STORE, 47507986132992, 47507986153471,
+ERASE, 47507986132992, 47507986132992,
+STORE, 47507986132992, 47507986153471,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986153472, 47507986161663,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986169855,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986161663,
+STORE, 47507986161664, 47507986169855,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986169856, 47507986518015,
+STORE, 47507986210816, 47507986518015,
+STORE, 47507986169856, 47507986210815,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986493439,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986423808, 47507986493439,
+STORE, 47507986210816, 47507986423807,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986423807,
+STORE, 47507986489344, 47507986493439,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986423808, 47507986423808,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986518016, 47507988779007,
+STORE, 47507986669568, 47507988779007,
+STORE, 47507986518016, 47507986669567,
+ERASE, 47507986669568, 47507986669568,
+STORE, 47507986669568, 47507988762623,
+STORE, 47507988762624, 47507988779007,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988770816, 47507988770816,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988779008, 47507988914175,
+ERASE, 47507988779008, 47507988779008,
+STORE, 47507988779008, 47507988803583,
+STORE, 47507988803584, 47507988914175,
+STORE, 47507988865024, 47507988914175,
+STORE, 47507988803584, 47507988865023,
+ERASE, 47507988803584, 47507988803584,
+STORE, 47507988803584, 47507988865023,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988865024, 47507988889599,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988914175,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988889599,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988897792, 47507988897792,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988897792, 47507988922367,
+STORE, 47507988922368, 47507989086207,
+ERASE, 47507988922368, 47507988922368,
+STORE, 47507988922368, 47507988934655,
+STORE, 47507988934656, 47507989086207,
+STORE, 47507989032960, 47507989086207,
+STORE, 47507988934656, 47507989032959,
+ERASE, 47507988934656, 47507988934656,
+STORE, 47507988934656, 47507989032959,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989032960, 47507989078015,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989086207,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989078015,
+STORE, 47507989078016, 47507989086207,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989086208, 47507989684223,
+STORE, 47507989204992, 47507989684223,
+STORE, 47507989086208, 47507989204991,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989630975,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989520384, 47507989630975,
+STORE, 47507989204992, 47507989520383,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989520383,
+STORE, 47507989626880, 47507989630975,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989520384, 47507989520384,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989684224, 47507992735743,
+STORE, 47507990228992, 47507992735743,
+STORE, 47507989684224, 47507990228991,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507992514559,
+STORE, 47507992514560, 47507992735743,
+STORE, 47507991924736, 47507992514559,
+STORE, 47507990228992, 47507991924735,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507991924735,
+STORE, 47507992510464, 47507992514559,
+STORE, 47507991924736, 47507992510463,
+ERASE, 47507991924736, 47507991924736,
+STORE, 47507991924736, 47507992510463,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992719360, 47507992719360,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992735744, 47507992768511,
+ERASE, 47507992735744, 47507992735744,
+STORE, 47507992735744, 47507992743935,
+STORE, 47507992743936, 47507992768511,
+STORE, 47507992756224, 47507992768511,
+STORE, 47507992743936, 47507992756223,
+ERASE, 47507992743936, 47507992743936,
+STORE, 47507992743936, 47507992756223,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992756224, 47507992760319,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992768511,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992760319,
+STORE, 47507992760320, 47507992768511,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992768512, 47507992805375,
+ERASE, 47507992768512, 47507992768512,
+STORE, 47507992768512, 47507992776703,
+STORE, 47507992776704, 47507992805375,
+STORE, 47507992793088, 47507992805375,
+STORE, 47507992776704, 47507992793087,
+ERASE, 47507992776704, 47507992776704,
+STORE, 47507992776704, 47507992793087,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992793088, 47507992797183,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992805375,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992797183,
+STORE, 47507992797184, 47507992805375,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992805376, 47507993280511,
+ERASE, 47507992805376, 47507992805376,
+STORE, 47507992805376, 47507992813567,
+STORE, 47507992813568, 47507993280511,
+STORE, 47507993149440, 47507993280511,
+STORE, 47507992813568, 47507993149439,
+ERASE, 47507992813568, 47507992813568,
+STORE, 47507992813568, 47507993149439,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993149440, 47507993272319,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993280511,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993272319,
+STORE, 47507993272320, 47507993280511,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993280512, 47507993288703,
+STORE, 47507993288704, 47507993309183,
+ERASE, 47507993288704, 47507993288704,
+STORE, 47507993288704, 47507993292799,
+STORE, 47507993292800, 47507993309183,
+STORE, 47507993296896, 47507993309183,
+STORE, 47507993292800, 47507993296895,
+ERASE, 47507993292800, 47507993292800,
+STORE, 47507993292800, 47507993296895,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993296896, 47507993300991,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993309183,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993300991,
+STORE, 47507993300992, 47507993309183,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993309184, 47507993317375,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985989631,
+STORE, 47507985989632, 47507985997823,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993305087,
+STORE, 47507993305088, 47507993309183,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988893695,
+STORE, 47507988893696, 47507988897791,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993276415,
+STORE, 47507993276416, 47507993280511,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992801279,
+STORE, 47507992801280, 47507992805375,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992764415,
+STORE, 47507992764416, 47507992768511,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992711167,
+STORE, 47507992711168, 47507992719359,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989667839,
+STORE, 47507989667840, 47507989684223,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989082111,
+STORE, 47507989082112, 47507989086207,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988766719,
+STORE, 47507988766720, 47507988770815,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986513919,
+STORE, 47507986513920, 47507986518015,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986165759,
+STORE, 47507986165760, 47507986169855,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986120703,
+STORE, 47507986120704, 47507986124799,
+ERASE, 94386579570688, 94386579570688,
+STORE, 94386579570688, 94386579693567,
+STORE, 94386579693568, 94386579697663,
+ERASE, 140124810997760, 140124810997760,
+STORE, 140124810997760, 140124811001855,
+STORE, 140124811001856, 140124811005951,
+ERASE, 47507984158720, 47507984158720,
+STORE, 94386583982080, 94386584117247,
+STORE, 94386583982080, 94386584256511,
+ERASE, 94386583982080, 94386583982080,
+STORE, 94386583982080, 94386584223743,
+STORE, 94386584223744, 94386584256511,
+ERASE, 94386584223744, 94386584223744,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733763395584, 140737488351231,
+ERASE, 140733763395584, 140733763395584,
+STORE, 140733763395584, 140733763399679,
+STORE, 94011546472448, 94011547152383,
+ERASE, 94011546472448, 94011546472448,
+STORE, 94011546472448, 94011546537983,
+STORE, 94011546537984, 94011547152383,
+ERASE, 94011546537984, 94011546537984,
+STORE, 94011546537984, 94011546886143,
+STORE, 94011546886144, 94011547025407,
+STORE, 94011547025408, 94011547152383,
+STORE, 139757597949952, 139757598121983,
+ERASE, 139757597949952, 139757597949952,
+STORE, 139757597949952, 139757597954047,
+STORE, 139757597954048, 139757598121983,
+ERASE, 139757597954048, 139757597954048,
+STORE, 139757597954048, 139757598076927,
+STORE, 139757598076928, 139757598109695,
+STORE, 139757598109696, 139757598117887,
+STORE, 139757598117888, 139757598121983,
+STORE, 140733763596288, 140733763600383,
+STORE, 140733763584000, 140733763596287,
+STORE, 47875197046784, 47875197054975,
+STORE, 47875197054976, 47875197063167,
+STORE, 47875197063168, 47875198902271,
+STORE, 47875197202432, 47875198902271,
+STORE, 47875197063168, 47875197202431,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198861311,
+STORE, 47875198861312, 47875198902271,
+STORE, 47875198545920, 47875198861311,
+STORE, 47875197202432, 47875198545919,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198545919,
+STORE, 47875198857216, 47875198861311,
+STORE, 47875198545920, 47875198857215,
+ERASE, 47875198545920, 47875198545920,
+STORE, 47875198545920, 47875198857215,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198885888, 47875198885888,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198902272, 47875199012863,
+STORE, 47875198918656, 47875199012863,
+STORE, 47875198902272, 47875198918655,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875199004671,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875198980096, 47875199004671,
+STORE, 47875198918656, 47875198980095,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875198980095,
+STORE, 47875199000576, 47875199004671,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875198980096, 47875198980096,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875199012864, 47875199057919,
+ERASE, 47875199012864, 47875199012864,
+STORE, 47875199012864, 47875199021055,
+STORE, 47875199021056, 47875199057919,
+STORE, 47875199041536, 47875199057919,
+STORE, 47875199021056, 47875199041535,
+ERASE, 47875199021056, 47875199021056,
+STORE, 47875199021056, 47875199041535,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199041536, 47875199049727,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199057919,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199049727,
+STORE, 47875199049728, 47875199057919,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199057920, 47875199406079,
+STORE, 47875199098880, 47875199406079,
+STORE, 47875199057920, 47875199098879,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199381503,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199311872, 47875199381503,
+STORE, 47875199098880, 47875199311871,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199311871,
+STORE, 47875199377408, 47875199381503,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199311872, 47875199311872,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199406080, 47875201667071,
+STORE, 47875199557632, 47875201667071,
+STORE, 47875199406080, 47875199557631,
+ERASE, 47875199557632, 47875199557632,
+STORE, 47875199557632, 47875201650687,
+STORE, 47875201650688, 47875201667071,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201658880, 47875201658880,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201667072, 47875201802239,
+ERASE, 47875201667072, 47875201667072,
+STORE, 47875201667072, 47875201691647,
+STORE, 47875201691648, 47875201802239,
+STORE, 47875201753088, 47875201802239,
+STORE, 47875201691648, 47875201753087,
+ERASE, 47875201691648, 47875201691648,
+STORE, 47875201691648, 47875201753087,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201753088, 47875201777663,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201802239,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201777663,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201785856, 47875201785856,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201785856, 47875201810431,
+STORE, 47875201810432, 47875201974271,
+ERASE, 47875201810432, 47875201810432,
+STORE, 47875201810432, 47875201822719,
+STORE, 47875201822720, 47875201974271,
+STORE, 47875201921024, 47875201974271,
+STORE, 47875201822720, 47875201921023,
+ERASE, 47875201822720, 47875201822720,
+STORE, 47875201822720, 47875201921023,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201921024, 47875201966079,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201974271,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201966079,
+STORE, 47875201966080, 47875201974271,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201974272, 47875202572287,
+STORE, 47875202093056, 47875202572287,
+STORE, 47875201974272, 47875202093055,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202519039,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202408448, 47875202519039,
+STORE, 47875202093056, 47875202408447,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202408447,
+STORE, 47875202514944, 47875202519039,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202408448, 47875202408448,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202572288, 47875205623807,
+STORE, 47875203117056, 47875205623807,
+STORE, 47875202572288, 47875203117055,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875205402623,
+STORE, 47875205402624, 47875205623807,
+STORE, 47875204812800, 47875205402623,
+STORE, 47875203117056, 47875204812799,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875204812799,
+STORE, 47875205398528, 47875205402623,
+STORE, 47875204812800, 47875205398527,
+ERASE, 47875204812800, 47875204812800,
+STORE, 47875204812800, 47875205398527,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205607424, 47875205607424,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205623808, 47875205656575,
+ERASE, 47875205623808, 47875205623808,
+STORE, 47875205623808, 47875205631999,
+STORE, 47875205632000, 47875205656575,
+STORE, 47875205644288, 47875205656575,
+STORE, 47875205632000, 47875205644287,
+ERASE, 47875205632000, 47875205632000,
+STORE, 47875205632000, 47875205644287,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205644288, 47875205648383,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205656575,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205648383,
+STORE, 47875205648384, 47875205656575,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205656576, 47875205693439,
+ERASE, 47875205656576, 47875205656576,
+STORE, 47875205656576, 47875205664767,
+STORE, 47875205664768, 47875205693439,
+STORE, 47875205681152, 47875205693439,
+STORE, 47875205664768, 47875205681151,
+ERASE, 47875205664768, 47875205664768,
+STORE, 47875205664768, 47875205681151,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205681152, 47875205685247,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205693439,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205685247,
+STORE, 47875205685248, 47875205693439,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205693440, 47875206168575,
+ERASE, 47875205693440, 47875205693440,
+STORE, 47875205693440, 47875205701631,
+STORE, 47875205701632, 47875206168575,
+STORE, 47875206037504, 47875206168575,
+STORE, 47875205701632, 47875206037503,
+ERASE, 47875205701632, 47875205701632,
+STORE, 47875205701632, 47875206037503,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206037504, 47875206160383,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206168575,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206160383,
+STORE, 47875206160384, 47875206168575,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206168576, 47875206176767,
+STORE, 47875206176768, 47875206197247,
+ERASE, 47875206176768, 47875206176768,
+STORE, 47875206176768, 47875206180863,
+STORE, 47875206180864, 47875206197247,
+STORE, 47875206184960, 47875206197247,
+STORE, 47875206180864, 47875206184959,
+ERASE, 47875206180864, 47875206180864,
+STORE, 47875206180864, 47875206184959,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206184960, 47875206189055,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206197247,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206189055,
+STORE, 47875206189056, 47875206197247,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206197248, 47875206205439,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198877695,
+STORE, 47875198877696, 47875198885887,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206193151,
+STORE, 47875206193152, 47875206197247,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201781759,
+STORE, 47875201781760, 47875201785855,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206164479,
+STORE, 47875206164480, 47875206168575,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205689343,
+STORE, 47875205689344, 47875205693439,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205652479,
+STORE, 47875205652480, 47875205656575,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205599231,
+STORE, 47875205599232, 47875205607423,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202555903,
+STORE, 47875202555904, 47875202572287,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201970175,
+STORE, 47875201970176, 47875201974271,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201654783,
+STORE, 47875201654784, 47875201658879,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199401983,
+STORE, 47875199401984, 47875199406079,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199053823,
+STORE, 47875199053824, 47875199057919,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199008767,
+STORE, 47875199008768, 47875199012863,
+ERASE, 94011547025408, 94011547025408,
+STORE, 94011547025408, 94011547148287,
+STORE, 94011547148288, 94011547152383,
+ERASE, 139757598109696, 139757598109696,
+STORE, 139757598109696, 139757598113791,
+STORE, 139757598113792, 139757598117887,
+ERASE, 47875197046784, 47875197046784,
+STORE, 94011557584896, 94011557720063,
+STORE, 94011557584896, 94011557855231,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557851135,
+STORE, 94011557851136, 94011557855231,
+ERASE, 94011557851136, 94011557851136,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557847039,
+STORE, 94011557847040, 94011557851135,
+ERASE, 94011557847040, 94011557847040,
+STORE, 94011557584896, 94011557982207,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557978111,
+STORE, 94011557978112, 94011557982207,
+ERASE, 94011557978112, 94011557978112,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557974015,
+STORE, 94011557974016, 94011557978111,
+ERASE, 94011557974016, 94011557974016,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734130360320, 140737488351231,
+ERASE, 140734130360320, 140734130360320,
+STORE, 140734130360320, 140734130364415,
+STORE, 94641232105472, 94641232785407,
+ERASE, 94641232105472, 94641232105472,
+STORE, 94641232105472, 94641232171007,
+STORE, 94641232171008, 94641232785407,
+ERASE, 94641232171008, 94641232171008,
+STORE, 94641232171008, 94641232519167,
+STORE, 94641232519168, 94641232658431,
+STORE, 94641232658432, 94641232785407,
+STORE, 139726599516160, 139726599688191,
+ERASE, 139726599516160, 139726599516160,
+STORE, 139726599516160, 139726599520255,
+STORE, 139726599520256, 139726599688191,
+ERASE, 139726599520256, 139726599520256,
+STORE, 139726599520256, 139726599643135,
+STORE, 139726599643136, 139726599675903,
+STORE, 139726599675904, 139726599684095,
+STORE, 139726599684096, 139726599688191,
+STORE, 140734130446336, 140734130450431,
+STORE, 140734130434048, 140734130446335,
+STORE, 47906195480576, 47906195488767,
+STORE, 47906195488768, 47906195496959,
+STORE, 47906195496960, 47906197336063,
+STORE, 47906195636224, 47906197336063,
+STORE, 47906195496960, 47906195636223,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906197295103,
+STORE, 47906197295104, 47906197336063,
+STORE, 47906196979712, 47906197295103,
+STORE, 47906195636224, 47906196979711,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906196979711,
+STORE, 47906197291008, 47906197295103,
+STORE, 47906196979712, 47906197291007,
+ERASE, 47906196979712, 47906196979712,
+STORE, 47906196979712, 47906197291007,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197319680, 47906197319680,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197336064, 47906197446655,
+STORE, 47906197352448, 47906197446655,
+STORE, 47906197336064, 47906197352447,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197438463,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197413888, 47906197438463,
+STORE, 47906197352448, 47906197413887,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197413887,
+STORE, 47906197434368, 47906197438463,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197413888, 47906197413888,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197446656, 47906197491711,
+ERASE, 47906197446656, 47906197446656,
+STORE, 47906197446656, 47906197454847,
+STORE, 47906197454848, 47906197491711,
+STORE, 47906197475328, 47906197491711,
+STORE, 47906197454848, 47906197475327,
+ERASE, 47906197454848, 47906197454848,
+STORE, 47906197454848, 47906197475327,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197475328, 47906197483519,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197491711,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197483519,
+STORE, 47906197483520, 47906197491711,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197491712, 47906197839871,
+STORE, 47906197532672, 47906197839871,
+STORE, 47906197491712, 47906197532671,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197815295,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197745664, 47906197815295,
+STORE, 47906197532672, 47906197745663,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197745663,
+STORE, 47906197811200, 47906197815295,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197745664, 47906197745664,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197839872, 47906200100863,
+STORE, 47906197991424, 47906200100863,
+STORE, 47906197839872, 47906197991423,
+ERASE, 47906197991424, 47906197991424,
+STORE, 47906197991424, 47906200084479,
+STORE, 47906200084480, 47906200100863,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200092672, 47906200092672,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200100864, 47906200236031,
+ERASE, 47906200100864, 47906200100864,
+STORE, 47906200100864, 47906200125439,
+STORE, 47906200125440, 47906200236031,
+STORE, 47906200186880, 47906200236031,
+STORE, 47906200125440, 47906200186879,
+ERASE, 47906200125440, 47906200125440,
+STORE, 47906200125440, 47906200186879,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200186880, 47906200211455,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200236031,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200211455,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200219648, 47906200219648,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200219648, 47906200244223,
+STORE, 47906200244224, 47906200408063,
+ERASE, 47906200244224, 47906200244224,
+STORE, 47906200244224, 47906200256511,
+STORE, 47906200256512, 47906200408063,
+STORE, 47906200354816, 47906200408063,
+STORE, 47906200256512, 47906200354815,
+ERASE, 47906200256512, 47906200256512,
+STORE, 47906200256512, 47906200354815,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200354816, 47906200399871,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200408063,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200399871,
+STORE, 47906200399872, 47906200408063,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200408064, 47906201006079,
+STORE, 47906200526848, 47906201006079,
+STORE, 47906200408064, 47906200526847,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200952831,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906200842240, 47906200952831,
+STORE, 47906200526848, 47906200842239,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200842239,
+STORE, 47906200948736, 47906200952831,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200842240, 47906200842240,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906201006080, 47906204057599,
+STORE, 47906201550848, 47906204057599,
+STORE, 47906201006080, 47906201550847,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203836415,
+STORE, 47906203836416, 47906204057599,
+STORE, 47906203246592, 47906203836415,
+STORE, 47906201550848, 47906203246591,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203246591,
+STORE, 47906203832320, 47906203836415,
+STORE, 47906203246592, 47906203832319,
+ERASE, 47906203246592, 47906203246592,
+STORE, 47906203246592, 47906203832319,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906204041216, 47906204041216,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906204057600, 47906204090367,
+ERASE, 47906204057600, 47906204057600,
+STORE, 47906204057600, 47906204065791,
+STORE, 47906204065792, 47906204090367,
+STORE, 47906204078080, 47906204090367,
+STORE, 47906204065792, 47906204078079,
+ERASE, 47906204065792, 47906204065792,
+STORE, 47906204065792, 47906204078079,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204078080, 47906204082175,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204090367,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204082175,
+STORE, 47906204082176, 47906204090367,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204090368, 47906204127231,
+ERASE, 47906204090368, 47906204090368,
+STORE, 47906204090368, 47906204098559,
+STORE, 47906204098560, 47906204127231,
+STORE, 47906204114944, 47906204127231,
+STORE, 47906204098560, 47906204114943,
+ERASE, 47906204098560, 47906204098560,
+STORE, 47906204098560, 47906204114943,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204114944, 47906204119039,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204127231,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204119039,
+STORE, 47906204119040, 47906204127231,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204127232, 47906204602367,
+ERASE, 47906204127232, 47906204127232,
+STORE, 47906204127232, 47906204135423,
+STORE, 47906204135424, 47906204602367,
+STORE, 47906204471296, 47906204602367,
+STORE, 47906204135424, 47906204471295,
+ERASE, 47906204135424, 47906204135424,
+STORE, 47906204135424, 47906204471295,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204471296, 47906204594175,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204602367,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204594175,
+STORE, 47906204594176, 47906204602367,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204602368, 47906204610559,
+STORE, 47906204610560, 47906204631039,
+ERASE, 47906204610560, 47906204610560,
+STORE, 47906204610560, 47906204614655,
+STORE, 47906204614656, 47906204631039,
+STORE, 47906204618752, 47906204631039,
+STORE, 47906204614656, 47906204618751,
+ERASE, 47906204614656, 47906204614656,
+STORE, 47906204614656, 47906204618751,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204618752, 47906204622847,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204631039,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204622847,
+STORE, 47906204622848, 47906204631039,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204631040, 47906204639231,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197311487,
+STORE, 47906197311488, 47906197319679,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204626943,
+STORE, 47906204626944, 47906204631039,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200215551,
+STORE, 47906200215552, 47906200219647,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204598271,
+STORE, 47906204598272, 47906204602367,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204123135,
+STORE, 47906204123136, 47906204127231,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204086271,
+STORE, 47906204086272, 47906204090367,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204033023,
+STORE, 47906204033024, 47906204041215,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906200989695,
+STORE, 47906200989696, 47906201006079,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200403967,
+STORE, 47906200403968, 47906200408063,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200088575,
+STORE, 47906200088576, 47906200092671,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197835775,
+STORE, 47906197835776, 47906197839871,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197487615,
+STORE, 47906197487616, 47906197491711,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197442559,
+STORE, 47906197442560, 47906197446655,
+ERASE, 94641232658432, 94641232658432,
+STORE, 94641232658432, 94641232781311,
+STORE, 94641232781312, 94641232785407,
+ERASE, 139726599675904, 139726599675904,
+STORE, 139726599675904, 139726599679999,
+STORE, 139726599680000, 139726599684095,
+ERASE, 47906195480576, 47906195480576,
+STORE, 94641242615808, 94641242750975,
+       };
+
+       mt_set_non_kernel(3);
+       check_erase2_testset(mt, set, ARRAY_SIZE(set));
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set2, ARRAY_SIZE(set2));
+       start = 140735933894656;
+       MT_BUG_ON(mt, !!mt_find(mt, &start, 140735933906943UL, true));
+       mtree_destroy(mt);
+
+       mt_set_non_kernel(2);
+       mtree_init(mt, 0);
+       check_erase2_testset(mt, set3, ARRAY_SIZE(set3));
+       mtree_destroy(mt);
+
+       mtree_init(mt, 0);
+       check_erase2_testset(mt, set4, ARRAY_SIZE(set4));
+       MA_STATE(mas, mt, 0, 0);
+       rcu_read_lock();
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (mas_retry(&mas, entry))
+                       continue;
+       }
+       rcu_read_unlock();
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       mt_set_non_kernel(100);
+       check_erase2_testset(mt, set5, ARRAY_SIZE(set5));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set6, ARRAY_SIZE(set6));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set7, ARRAY_SIZE(set7));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set8, ARRAY_SIZE(set8));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set9, ARRAY_SIZE(set9));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set10, ARRAY_SIZE(set10));
+       rcu_barrier();
+       mtree_destroy(mt);
+}
+
+static noinline void check_alloc_rev_range(struct maple_tree *mt)
+{
+       /* Generated by:
+        * cat /proc/self/maps | awk '{print $1}'|
+        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
+        */
+
+       unsigned long range[] = {
+       //      Inclusive     , Exclusive.
+               0x565234af2000, 0x565234af4000,
+               0x565234af4000, 0x565234af9000,
+               0x565234af9000, 0x565234afb000,
+               0x565234afc000, 0x565234afd000,
+               0x565234afd000, 0x565234afe000,
+               0x565235def000, 0x565235e10000,
+               0x7f36d4bfd000, 0x7f36d4ee2000,
+               0x7f36d4ee2000, 0x7f36d4f04000,
+               0x7f36d4f04000, 0x7f36d504c000,
+               0x7f36d504c000, 0x7f36d5098000,
+               0x7f36d5098000, 0x7f36d5099000,
+               0x7f36d5099000, 0x7f36d509d000,
+               0x7f36d509d000, 0x7f36d509f000,
+               0x7f36d509f000, 0x7f36d50a5000,
+               0x7f36d50b9000, 0x7f36d50db000,
+               0x7f36d50db000, 0x7f36d50dc000,
+               0x7f36d50dc000, 0x7f36d50fa000,
+               0x7f36d50fa000, 0x7f36d5102000,
+               0x7f36d5102000, 0x7f36d5103000,
+               0x7f36d5103000, 0x7f36d5104000,
+               0x7f36d5104000, 0x7f36d5105000,
+               0x7fff5876b000, 0x7fff5878d000,
+               0x7fff5878e000, 0x7fff58791000,
+               0x7fff58791000, 0x7fff58793000,
+       };
+
+       unsigned long holes[] = {
+               /*  Note: start of hole is INCLUSIVE
+                *        end of hole is EXCLUSIVE
+                *        (opposite of the above table.)
+                * Start of hole, end of hole,  size of hole (+1)
+                */
+               0x565234afb000, 0x565234afc000, 0x1000,
+               0x565234afe000, 0x565235def000, 0x12F1000,
+               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
+       };
+
+       /* req_range consists of 4 values.
+        * 1. min index
+        * 2. max index
+        * 3. size
+        * 4. number that should be returned.
+        * 5. return value
+        */
+       unsigned long req_range[] = {
+               0x565234af9000, // Min
+               0x7fff58791000, // Max
+               0x1000,         // Size
+               0x7fff5878d << 12,  // First rev hole of size 0x1000
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x565234AF1 << 12,    // Max
+               0x3000,         // Size
+               0x565234AEF << 12,  // hole - 3.
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x0,            // Max
+               0x1000,         // Size
+               0x0,            // First rev hole of size 0x1000
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x7F36D510A << 12,    // Max
+               0x4000,         // Size
+               0x7F36D5107 << 12,    // First rev hole of size 0x4000
+               0,              // Return value success.
+
+               // Ascend test.
+               0x0,
+               34148798629 << 12,
+               19 << 12,
+               34148797418 << 12,
+               0x0,
+
+               // Too big test.
+               0x0,
+               18446744073709551615UL,
+               562915594369134UL << 12,
+               0x0,
+               -EBUSY,
+
+       };
+
+       int i, range_cnt = ARRAY_SIZE(range);
+       int req_range_cnt = ARRAY_SIZE(req_range);
+       unsigned long min = 0;
+
+       MA_STATE(mas, mt, 0, 0);
+
+
+       for (i = 0; i < range_cnt; i += 2) {
+               /* Inclusive, Inclusive (with the -1) */
+               pr_debug("\tInsert %lu-%lu\n", range[i] >> 12,
+                               (range[i + 1] >> 12) - 1);
+               check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
+                               xa_mk_value(range[i] >> 12), 0);
+               mt_validate(mt);
+       }
+
+
+       for (i = 0; i < ARRAY_SIZE(holes); i += 3) {
+               MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, min,
+                                       holes[i+1] >> 12,
+                                       holes[i+2] >> 12));
+               MT_BUG_ON(mt, mas.index != holes[i] >> 12);
+               min = holes[i+1] >> 12;
+               mas_reset(&mas);
+       }
+
+       for (i = 0; i < req_range_cnt; i += 5) {
+               pr_debug("\tRequest between %lu-%lu size %lu\n",
+                               req_range[i] >> 12,
+                               (req_range[i + 1] >> 12) - 1,
+                               req_range[i+2] >> 12);
+               check_mtree_alloc_rrange(mt,
+                               req_range[i]   >> 12, // start
+                               req_range[i+1] >> 12, // end
+                               req_range[i+2] >> 12, // size
+                               req_range[i+3] >> 12, // expected address
+                               req_range[i+4],       // expected return
+                               xa_mk_value(req_range[i] >> 12)); // pointer
+               mt_validate(mt);
+       }
+
+       mtree_destroy(mt);
+}
+
+static noinline void check_alloc_range(struct maple_tree *mt)
+{
+       /* Generated by:
+        * cat /proc/self/maps|awk '{print $1}'|
+        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
+        */
+
+       unsigned long range[] = {
+       //      Inclusive     , Exclusive.
+               0x565234af2000, 0x565234af4000,
+               0x565234af4000, 0x565234af9000,
+               0x565234af9000, 0x565234afb000,
+               0x565234afc000, 0x565234afd000,
+               0x565234afd000, 0x565234afe000,
+               0x565235def000, 0x565235e10000,
+               0x7f36d4bfd000, 0x7f36d4ee2000,
+               0x7f36d4ee2000, 0x7f36d4f04000,
+               0x7f36d4f04000, 0x7f36d504c000,
+               0x7f36d504c000, 0x7f36d5098000,
+               0x7f36d5098000, 0x7f36d5099000,
+               0x7f36d5099000, 0x7f36d509d000,
+               0x7f36d509d000, 0x7f36d509f000,
+               0x7f36d509f000, 0x7f36d50a5000,
+               0x7f36d50b9000, 0x7f36d50db000,
+               0x7f36d50db000, 0x7f36d50dc000,
+               0x7f36d50dc000, 0x7f36d50fa000,
+               0x7f36d50fa000, 0x7f36d5102000,
+               0x7f36d5102000, 0x7f36d5103000,
+               0x7f36d5103000, 0x7f36d5104000,
+               0x7f36d5104000, 0x7f36d5105000,
+               0x7fff5876b000, 0x7fff5878d000,
+               0x7fff5878e000, 0x7fff58791000,
+               0x7fff58791000, 0x7fff58793000,
+       };
+       unsigned long holes[] = {
+               // Start of hole, end of hole,  size of hole (+1)
+               0x565234afb000, 0x565234afc000, 0x1000,
+               0x565234afe000, 0x565235def000, 0x12F1000,
+               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
+       };
+
+       /* req_range consists of 4 values.
+        * 1. min index
+        * 2. max index
+        * 3. size
+        * 4. number that should be returned.
+        * 5. return value
+        */
+       unsigned long req_range[] = {
+               0x565234af9000, // Min
+               0x7fff58791000, // Max
+               0x1000,         // Size
+               0x565234afb000, // First hole in our data of size 1000.
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x7fff58791000, // Max
+               0x1F00,         // Size
+               0x0,            // First hole in our data of size 2000.
+               0,              // Return value success.
+
+               // Test ascend.
+               34148797436 << 12, // Min
+               0x7fff587AF000,    // Max
+               0x3000,         // Size
+               34148798629 << 12,             // Expected location
+               0,              // Return value success.
+
+               // Test failing.
+               34148798623 << 12,  // Min
+               34148798683 << 12,  // Max
+               0x15000,            // Size
+               0,             // Expected location
+               -EBUSY,              // Return value failed.
+
+               // Test filling entire gap.
+               34148798623 << 12,  // Min
                0x7fff587AF000,    // Max
                0x10000,           // Size
                34148798632 << 12,             // Expected location
@@ -5764,7 +9664,8 @@ static noinline void check_alloc_range(struct maple_tree *mt)
        int req_range_cnt = ARRAY_SIZE(req_range);
 
        for (i = 0; i < range_cnt; i += 2) {
-               //printk("\tInsert %lu-%lu\n", range[i] >> 12, (range[i + 1] >> 12) - 1);
+               pr_debug("\tInsert %lu-%lu\n", range[i] >> 12,
+                        (range[i + 1] >> 12) - 1);
                check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
                                xa_mk_value(range[i] >> 12), 0);
                mt_validate(mt);
@@ -5783,7 +9684,7 @@ static noinline void check_alloc_range(struct maple_tree *mt)
        }
        for (i = 0; i < req_range_cnt; i += 5) {
                /*
-               printk("\tTest %d: %lu-%lu size %lu expected %lu\n", i/5,
+               pr_debug("\tTest %d: %lu-%lu size %lu expected %lu\n", i/5,
                                req_range[i]   >> 12,
                                req_range[i + 1]   >> 12,
                                req_range[i + 2]   >> 12,
@@ -5824,14 +9725,17 @@ static noinline void check_ranges(struct maple_tree *mt)
        mtree_destroy(mt);
 
        check_seq(mt, 50, false);
+       mt_set_non_kernel(4);
        check_store_range(mt, 5, 47,  xa_mk_value(47), 0);
        mtree_destroy(mt);
 
        // Create tree of 1-100
        check_seq(mt, 100, false);
        // Store 45-168
+       mt_set_non_kernel(10);
        check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0);
        mtree_destroy(mt);
+//     rcu_barrier();
 
        // Create tree of 1-200
        check_seq(mt, 200, false);
@@ -5935,7 +9839,6 @@ static int maple_tree_seed(void)
 
        /* Clear out the tree */
        mtree_destroy(&tree);
-       //exit(0);
 
        /* Try to insert, insert a dup, and load back what was inserted. */
        mtree_init(&tree, 0);
@@ -5979,9 +9882,6 @@ static int maple_tree_seed(void)
        mtree_init(&tree, 0);
        check_erase_testset(&tree);
        mtree_destroy(&tree);
-       mtree_init(&tree, 0);
-       check_erase2_sets(&tree);
-       mtree_destroy(&tree);
 
        mtree_init(&tree, 0);
 /*
@@ -6049,13 +9949,14 @@ static int maple_tree_seed(void)
        check_next_entry(&tree);
        check_find(&tree);
        check_find_2(&tree);
-       goto done;
+       mtree_destroy(&tree);
 
 
        mtree_init(&tree, 0);
        check_prev_entry(&tree);
-
-done:
+       mtree_init(&tree, 0);
+       check_erase2_sets(&tree);
+       mtree_destroy(&tree);
        rcu_barrier();
 
        pr_info("maple_tree: %u of %u tests passed\n", tests_passed, tests_run);