(plt_addr)
            if no:
                bb_call += [pred.addr for pred in no.predecessors]

        # for each basic block and predecessor discover the registers
        # providing input to the methods
        for b_block in bb_call:
            try:
                no = cfg.model.get_any_node(b_block)
                faddr = no.function_address
                if faddr not in sources:
                    sources[faddr] = []
                regs = arg_reg_names(p, get_arity(p, no.addr))

                sources[faddr].append((no.addr, tuple(regs)))

                # we go one level back
                n_f = cfg.model.get_any_node(faddr)
                preds = n_f.predecessors
                for pred in preds:
                    regs = arg_reg_names(p, get_arity(p, pred.addr))

                    if pred.function_address not in sources:
                        sources[pred.function_address] = []
                    sources[pred.function_address].append((pred.addr, tuple(regs)))
            except Exception as e:
                log.error(f"BBF: Error encountered when discovering input registers: {e}")

        for k in sources:
            sources[k] = list(set(sources[k]))

        return sources

    @staticmethod
    def _find_sinks_of_taint(p, cfg):
        """
        Find sinks of taint (i.e., memcmp-like functions)
        :return: list of sinks
        """

        sinks = {}
        for f in cfg.functions.values():
            res = BorderBinariesFinder._find_interesting_memcmp(f, p, cfg)
            if res[f.addr]:
                sinks.update(res)
        return sinks

    def get_border_binaries(self):
        """
        Return a list of parser binaries
        :return: list of parser binaries
        """

        return self._candidates

    def get_bb_fw(self):
        """
        Get the number of basic blocs in a firmware sample
        :return: Number of basic blocs in a firmware sample
        """

        return self._tot_fw_bb

    def _pickle_it(self, pickle_file):
        """
        Pickle this module results
        :param pickle_file: path to pickle file
        """
        log.info(f"Candidates pickled in {pickle_file}")

        pickle_dir = '/'.join(pickle_file.split('/')[:-1])
        if not os.path.exists(pickle_dir):
            os.makedirs(pickle_dir)

        fp = open(pickle_file, 'wb')
        pickle.dump((self._candidates, self._stats, self._multiplier), fp)
        fp.close()

    def analysis_time(self):
        """
        Gets the analysis time
        :return: return the analysis time
        """
        if not self._end_time or self._start_time:
            return 0
        return self._end_time - self._start_time

    def run(self, pickle_file=None, bins=None):
        """
        Run the this module algorithm
        :param pickle_file: path to pickle file
        :param bins: binaries to consider
        :return: the list of border binaries
        """

        self._start_time = time.time()
        if pickle_file and os.path.isfile(pickle_file):
            with open(pickle_file, 'rb') as fp:
                self._candidates, self._stats, self._multiplier = pickle.load(fp)
        else:
            if not pickle_file:
                pickle_dir = DEFAULT_PICKLE_DIR
                rel_pickle_name = self._fw_path.replace('/', '_').replace('.', '')
                pickle_file = pickle_dir + '/' + rel_pickle_name + '.pk'

            self._collect_stats(bins)
            self._apply_parsing_score()
            self._border_binaries = BorderBinariesFinder._get_first_cluster(self._candidates)
            self._pickle_it(pickle_file)

        self._end_time = time.time()
        log.info(f"The discovered border binaries are: {self._border_binaries}")
        return self._border_binaries
10 days in and two kilos down so far. What calorie tacking apps can people recommend please?

So, as the title indicates, I jumped right in the deep end and went straight to the most restrictive fast regimes.. I've found it reasonably easy going so far and could probably increase to only 23:1 if necessary or a longer weekend fast. This is my current status board : https://imgur.com/a/mGu0zsG

The question I have of my fellow OMAD'ers is what calorie monitoring apps do you use or can recommend for Android? I don't tend to eat much packaged food, preferring something like this : https://imgur.com/a/E8swhG3 and a piece of fruit, but I can't work out what sort of calories a meal like this contains, as most apps I have looked at rely on barcodes to calculate nutrition data.

I'm not doing any exercise right now, which I know needs to change, but I have the feeling that if I get my breakfast intake right, the weight will drop steadily regardless.Anguilla is the most northern island in the Leeward Island chain, less than ten miles north of St. Maartin and 200 miles east of Puerto Rico.
The island of Anguilla is a 1-hour plane ride from San Juan, Puerto Rico or a 20-minute boat ride from St. Maarten via private charters or public ferry or a 5 minute flight from St. Maarten.
A private boat charter is $440.00 for up to 4 passengers, each additional passenger is $40.00.
The public ferry departs St. Marten from Marigot which is a $25.00 cab ride from the airport and the fee is dependent on the amount of passengers. The cost of the ferry is $20.00 per person plus $5.00 departure tax from St. Maarten. The public ferry departs every 45 minutes from St. Marten and Anguilla.
You can also be transferred by small Airplane which is $440.00 for up to 7 passengers.After years of status quo, the brand lacked grit. Whole-Brained gave it a fresh injection of testosterone by shifting the point of view from retail manufacturer — to real man. Inspired by “common interests” that all men seem to share, regardless of segment, Whole-Brained evolved the core identity, created an icon, and adapted our new thinking about the brand to events, promotions, environments, and a family of subbrands.
Core brand book: This simple brand book embodies everything Wolverine stands for. Anyone can quickly read it and understand the important ideas behind the brand.
Brand icon: The “claw” succeeded where a previous “pawprint” had failed: evoking the emotion of the brand through the ferocity of a real wolverine, and literally “branding” products.
Core brand manual: Going beyond the usual logo and color rules, we included tone of voice for copy, guidelines for store branding, and icon placement on products.
Core brand print ads: The rugged new look was launched with “kick-ass” print, radio, and web on ESPN media.
Rugged outdoor shop: We helped Wolverine transition the brand from work into rugged outdoor by creating a related look under the same brand name—without creating a subbrand that would sacrifice the strength of the original. The shop design is a “kit of parts” that can be put together almost anywhere.
Rugged outdoor packaging: A variation on the palette of colors and materials from the work category… yet still clearly the iconic Wolverine brand.
Rugged outdoor box lid liner: Relating the ferocious brand essence to comfort, another thing Wolverine is known for. Not an easy task. But we did it.
Rugged outdoor hang tags: In a world flooded with visuals, we still want to people to be able to read about a great product. Inserts inside branded hang tags give product details.
Trade show design: A formerly generic trade show space was transformed into an authentic expression of the brand.
Trade show exterior: Celebrating key brand materials and elements. “Flipper” panels pivot to exhibit footwear and apparel or graphics.
Showroom workspace: An efficient fixture system and brand-right tables and chairs. Background graphics tell the story without intruding. This space works!
Trade show entrance: The two-story high graphic makes the brand feel larger than life — and makes the booth easier to spot from afar.
Apparel awareness campaign: Print ad helps retail buyers connect the tough new apparel